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

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": "#"
      }
    }
  }
}

相关推荐

  1. elasticsearch 索引模版

    2024-03-27 14:12:04       46 阅读
  2. Elasticsearch克隆索引

    2024-03-27 14:12:04       42 阅读
  3. Elasticsearch索引定义

    2024-03-27 14:12:04       34 阅读
  4. 【翻译】Elasticsearch-索引模块

    2024-03-27 14:12:04       37 阅读
  5. Elasticsearch索引映射定义

    2024-03-27 14:12:04       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 14:12:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 14:12:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 14:12:04       87 阅读
  4. Python语言-面向对象

    2024-03-27 14:12:04       96 阅读

热门阅读

  1. 物联网(IoT)常用的通信协议

    2024-03-27 14:12:04       41 阅读
  2. deepspeed chat RLHF 个人笔记(待完成)

    2024-03-27 14:12:04       43 阅读
  3. 【Postman】如何给请求的参数设置随机数

    2024-03-27 14:12:04       39 阅读
  4. excel创建和部分使用

    2024-03-27 14:12:04       42 阅读
  5. 数据结构链栈实现(c语言)

    2024-03-27 14:12:04       45 阅读
  6. 软件工程的相关知识点

    2024-03-27 14:12:04       38 阅读
  7. 使用 React Hooks 管理状态和引用

    2024-03-27 14:12:04       39 阅读
  8. Web开发:深入探讨React Hooks的使用和最佳实践

    2024-03-27 14:12:04       39 阅读
  9. mysql怎么创建索引?

    2024-03-27 14:12:04       34 阅读
  10. Kotlin object

    2024-03-27 14:12:04       39 阅读