把elasticsearch(7.7.1)修改为starter方式

文章来源原创   作者:临窗旋墨   发布时间:2020-09-11   阅读:998   标签:spring

[toc]

006-把elasticsearch(7.7.1)修改为starter方式

文章来源:临窗旋墨的博客,转载望指明出处。

一初衷:为什么想把es写成一个starter

博客项目集成了ES7.7.1;但是本地启动项目的时候,每次还需要启动es,觉着有点麻烦,故希望可以改成可配置是否启动等;

  1. 方便插拔,在不需要时,可通过配置移除
  2. 方便版本控制
  3. 方便统一扩展,和复用

二 大概要实现的功能点

把一些常用的功能集成起来,既方便使用,也方便后续统一扩展

  1. 统一配置
    1. addresses:ip:port
    2. scheme
    3. timeout等
  2. RestHighLevelClient配置和创建
    1. 启动的时候判断index是否创建,没有则创建
    2. 关闭的销毁RestHighLevelClient
  3. 提供一些基础的api操作
    1. 操作index
    2. es文档的基本增删改查
    3. 高亮查询

三 按照大概要实现的功能点开始编码

3.1 依赖

在parent项目中已经管理es的版本,在当前项目只需要引入即可

<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

parent.xml配置如下

  1. <elasticsearch.version>7.7.1</elasticsearch.version>
  2. <!-- 重新定义es的版本依赖 start -->
  3. <dependency>
  4. <groupId>org.elasticsearch.client</groupId>
  5. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  6. <version>${elasticsearch.version}</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.elasticsearch</groupId>
  10. <artifactId>elasticsearch</artifactId>
  11. <version>${elasticsearch.version}</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.elasticsearch.client</groupId>
  15. <artifactId>elasticsearch-rest-client</artifactId>
  16. <version>${elasticsearch.version}</version>
  17. </dependency>
  18. <!-- 重新定义es的版本依赖 start -->

3.2 一些通用配置,参见配置类EsProperties

  1. # 是否开启es starter 默认true
  2. es.enabled=true
  3. # 超时时间 默认5分钟5 * 60 * 1000
  4. es.timeout=3000000
  5. #scheme 默认http
  6. es.scheme=http
  7. ## es的地址列表,默认会配置一个127.0.0.1:9200
  8. es.address[0].ip=127.0.0.1
  9. es.address[0].port=9200
  10. ## index列表, 会在启动项目的时候检测是否存在, 不存在则创建
  11. #index name
  12. es.indexes[0].name=indexName
  13. #别名 不配置 则根据名称+_alias
  14. es.indexes[0].alias=indexNamealias
  15. # 分片数 默认3
  16. es.indexes[0].shards=3
  17. #备份数 默认0
  18. es.indexes[0].replicas=0
  19. # 分词器 默认 ik_max_word
  20. es.indexes[0].analyzer=ik_max_word
  21. ### index的mapping配置,field:字段; type:类型
  22. es.indexes[0].properties[0].field=title
  23. es.indexes[0].properties[0].type=text
  24. es.indexes[0].properties[1].field=id
  25. es.indexes[0].properties[1].type=keyword
换成yaml格式如下
  1. es:
  2. address:
  3. - ip: 127.0.0.1
  4. port: 9200
  5. enabled: true
  6. indexes:
  7. - alias: indexNamealias
  8. analyzer: ik_max_word
  9. name: indexName
  10. properties:
  11. - field: title
  12. type: text
  13. - field: id
  14. type: keyword
  15. replicas: 0
  16. shards: 3
  17. scheme: http
  18. timeout: 3000000

3.3 自动配置入口类EsAutoconfigure

3.3.1 配置RestHighLevelClient
3.3.2 创建index操作工具类IndexHelper
  • 删除索引
  • 创建索引
  • 判断索引是否存在
  • 构建索引的配置属性
3.3.3 创建EsDocumentHelper 方便对文档的一些 操作
  • 单个文档 的增删改查
  • 文档批量增删改查
3.3.4 创建EsSearchHelper 用于高亮查询

详情参见代码

3.3.5 项目启动后创建索引 #initIndex
  • 不存在的则创建
3.3.6 项目关闭的时候关闭客户端#closeClient

四 META-INF\spring.factories(略)

本文非介绍如何构建springboot-starter

只大体记录了当前实现的部分功能,如果感兴趣可以查看源码,相互交流。

2020年9月11日 许秋冬

文章来源:临窗旋墨的博客,转载望指明出处。


发表评论

目录