elasticsearch 教程(一)程序建立索引

发布于:2024-03-29 ⋅ 阅读:(13) ⋅ 点赞:(0)

elasticsearch 教程(一)程序建立索引

从elasticsearch 8.x开始,除了通过kibana建立索引之外,还可以在Java程序定义索引。待程序运行时,会先检测是否建立索引,如果已建立索引,即使程序中定义的索引结构发生变化,也不会删除索引然后再重建索引;如果没有建立索引,则会按照程序中定义的索引结构新建索引。

image-20240326133027324

下面首先来讲一下es 8.x中的两个注解@Setting@Mapping@Setting这个注解根据名称可以得知是定义索引相关的设置,例如在这个里面可以定义ik分词器、拼音分词器、简繁体、同义词等分词器;@Mapping这个注解则是定义索引结构,索引有哪些字段、字段采用什么数据类型、字段如何分词、是否设置为自动补齐的字段等定义。

@Data
@Document(indexName = "post")
@Setting(settingPath = "json/post-setting.json")
@Mapping(mappingPath = "json/post-mapping.json")
public class PostIndex {


    /**
     * 主键
     */
    private Long id;

    /**
     * 创建人用户名
     */
    private String username;

    /**
     * 头像;两个用英文逗号分割
     */
    private String avatar;

    /**
     * 标题
     */
    private String title;
    /**
     * 内容
     */
    private String content;

    /**
     * 来源; 1.cool 2.ig
     */
    private Integer source;

    /**
     * 是否展示
     */
    private Integer isShow;

    /**
     * 排序字段
     */
    private Integer order;

    /**
     * ig贴文地址
     */
    private String igUrl;

    /**
     * 创建时间
     */
    private Date createTime;


    /**
     * 发布时间
     */
    private String publishTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 创建人id(cool)
     */
    private Long userid;


    /**
     * 投票数
     */
    private Integer votes;

    /**
     * 投票状态
     */
    private Boolean vote = false;

    /**
     * 标签列表
     */
    private Integer privacy;

    /**
     * 收藏状态
     */
    private Boolean collect = false;

    /**
     * tag标签列表
     */
    @Field(searchAnalyzer = "ikSearchAnalyzer")
    private List<String> tagsList;

    /**
     * 资源列表
     */
    private List<String> resourcesList;

    /**
     * 创建人
     */
    private String creator;

    /**
     * 更新人
     */
    private String updater;

    /**
     * 0草稿、1启用、-1删除
     */
    private Integer status;

    /**
     * 点赞数
     */
    private Integer likes;

    /**
     * 封面图片
     */
    private String img;

}

post-mapping.json文件

{
  "properties": {
    "id": {
      "type": "long"
    },
    "avatar": {
      "type": "keyword"
    },
    "title": {
      "type": "text",
      "store": true,
      "copy_to": "all",
      "analyzer": "text_analyzer",
      "search_analyzer": "ikSearchAnalyzer",
      "fields": {
        "suggest": {
          "type": "completion",
          "analyzer": "ik_max_word",
          "preserve_separators": true,
          "preserve_position_increments": true,
          "max_input_length": 50
        }
      }
    },
    "content": {
      "type": "text",
      "store": true,
      "copy_to": "all",
      "analyzer": "text_analyzer",
      "search_analyzer": "ikSearchAnalyzer",
      "fields": {
        "suggest": {
          "type": "completion",
          "analyzer": "ik_max_word",
          "preserve_separators": true,
          "preserve_position_increments": true,
          "max_input_length": 50
        }
      }
    },
    "createTime": {
      "type": "date",
      "index": false,
      "store": true,
      "format": "date_optional_time",
      "ignore_malformed": true
    },
    "publishTime": {
      "type": "date",
      "format": "yyyy-MM-dd"
    },
    "creator": {
      "type": "keyword",
      "store": true
    },
    "igUrl": {
      "type": "keyword"
    },
    "isShow": {
      "type": "integer",
      "index": false,
      "store": true
    },
    "resourcesList": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    },
    "img":{
      "type": "keyword",
      "store": true
    },
    "tagsList": {
      "type": "completion",
      "analyzer": "completion_analyzer",
      "search_analyzer": "ikSearchAnalyzer"
    },
    "likes": {
      "type": "keyword",
      "store": true
    },
    "votes": {
      "type": "keyword",
      "store": true
    },
    "vote": {
      "type": "keyword",
      "store": true
    },
    "privacy": {
      "type": "keyword",
      "store": true
    },
    "collect": {
      "type": "keyword",
      "store": true
    },
    "order": {
      "type": "keyword"
    },
    "postId": {
      "type": "long"
    },
    "source": {
      "type": "integer",
      "index": false,
      "store": true
    },
    "status": {
      "type": "keyword",
      "store": true
    },
    "updateTime": {
      "type": "date",
      "index": false,
      "store": true,
      "format": "date_optional_time",
      "ignore_malformed": true
    },
    "updater": {
      "type": "keyword",
      "store": true
    },
    "userid": {
      "type": "keyword"
    },
    "username": {
      "type": "keyword",
      "store": true
    },
    "all": {
      "type": "text",
      "analyzer": "text_analyzer",
      "search_analyzer": "ikSearchAnalyzer",
      "fields": {
        "suggest": {
          "type": "completion",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        }
      }
    }
  }
}

post-settings.json文件

{
  "analysis": {
    "analyzer": {
      "text_analyzer": {
        "filter": ["py"],
        "tokenizer": "ik_max_word",
        "char_filter": [
          "tsConvert"
        ]
      },
      "completion_analyzer": {
        "char_filter": [
          "tsConvert"
        ],
        "tokenizer": "ik_max_word"
      },
      "tsConvert": {
        "tokenizer": "tsConvert"
      },
      "ikSearchAnalyzer": {
        "type": "custom",
        "tokenizer": "ik_max_word",
        "char_filter": [
          "tsConvert"
        ]
      }
    },
    "filter": {
      "py": {
        "type": "pinyin",
        "keep_full_pinyin": false,
        "keep_joined_full_pinyin": true,
        "keep_original": true,
        "limit_first_letter_length": 16,
        "remove_duplicated_term": true,
        "none_chinese_pinyin_tokenize": false
      },
      "tsConvert": {
        "convert_type": "t2s",
        "type": "stconvert",
        "keep_both": "false",
        "delimiter": "#"
      }
    },
    "char_filter": {
      "tsConvert": {
        "convert_type": "t2s",
        "type": "stconvert"
      }
    },
    "tokenizer": {
      "tsConvert": {
        "convert_type": "t2s",
        "type": "stconvert",
        "keep_both": "false",
        "delimiter": "#"
      }
    }
  }
}

本文含有隐藏内容,请 开通VIP 后查看