spring boot 2.X集成ES 进行CRUD操作 完整版
内容包括:
=========================================================================================
1.CRUD:单字段查询、复合查询、分页查询、评分查询√
2.时间范围查询√
3.GET方法传入时间类型解析不了的问题√
4.term和match查询的区别√
5.filter+query查询的区别√
6.自定义ES的mapping,自定义settings√
7.解决@Field注解 设置分词器无效的问题、解决@Document注解 设置分区 以及备份无效的问题√
8.pinyin查询以及繁简体转化查询的集成√
9.同一个字段设置多种分词器的解决方案√
10.不同分词器的区别。读时分词和写时分词√
11.索引数据迁移
12.keyword与text类型区别以及引出的相关问题√
13.index创建的索引状态为yellow以及启动集群后对于index状态、分片、备份的影响
=======================================================================================
要求:
spring boot 2.0.1
elasticsearch 6.5.4
spring-boot-starter-data-elasticsearch
es中要求已经安装了ik分词器、pingyin分词器、繁简体转化分词器[安装步骤]
=======================================================================================
注明:
下文中红色字体部分,即为集成过程中解决的问题。
=======================================================================================
集成项目结构:
===================================================================================
一、spring boot 集成ES基本操作的步骤
1.pom.xml引入jar包
<!-- spring-boot-starter-data-elasticsearch --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
2.ES连接信息,配置在application.properties中
#elasticsearch相关配置
#es的cluster集群名称可以查看服务器安装的集群名称 curl http://192.168.92.130:9200 获取到集群名称
spring.data.elasticsearch.cluster-name=docker-cluster
#注意端口为9300 9300 是 Java 客户端的端口,支持集群之间的通信。9200 是支持 Restful HTTP 的接口
spring.data.elasticsearch.cluster-nodes=192.168.92.130:9300
3.测试实体Builder
package com.sxd.swapping.domain; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.springframework.data.elasticsearch.annotations.*; import javax.persistence.Id; import java.util.Date; /** * es的index的settings 和 mapping 设置,是最初的第一次设置。后续即使更改,也不起作用。 * 但是mapping中的属性名称以及属性个数如果更改了,会更新到ES中。这样会导致数据的丢失。需要注意。 */ @Setter @Getter //ES的三个注解 //指定index索引名称为项目名 指定type类型名称为实体名 @Document(indexName = "swapping",type = "builder") //相当于ES中的mapping 注意对比文件中的json和原生json 最外层的key是没有的 @Mapping(mappingPath = "/esConfig/builder-mapping.json") //相当于ES中的settings 注意对比文件中的json和原生json 最外层的key是没有的 @Setting(settingPath = "/esConfig/builder-setting.json") public class Builder { //id 测试长整型数据 注意与es中索引本身id区分开 @Id private Long id; //在创建初始化索引开始 就要去查看mapping是否ik分词创建成功 否则 需要进行索引数据的迁移操作 //指定查询分词器 为ik分词器 存储分词器为 ik分词器 //在@Field中指定的ik分词器没起作用,因此采用上面的两个注解 可以完全自定义类型Field的各个属性 //@Field(searchAnalyzer = "ik_max_word",analyzer = "ik_max_word") //类型定义为text 可测试ik分词 繁简体转化 pinyin分词 查询效果 //名称 测试字符串类型 private String buildName; //类型定义为text 可测试大文本 private String remark; //类型定义为keyword 可测试是否分词 以及查询效果 private String email; //数量 测试整型数据 private int buildNum; //时间也可以进行范围查询,但是查询传入参数,应该为mapping中定义的时间字段的 格式化字符串 或 时间戳 否则,ES无法解析格式会报错 //时间 测试时间类型 private Date buildDate; //积分比率 测试浮点型数据 private Double integral; //分页大小 private Integer pageNum = 0; //分页数量 private Integer pageSize = 10; }