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分词器、繁简体转化分词器[安装步骤]

=======================================================================================

注明:

下文中红色字体部分,即为集成过程中解决的问题。

=======================================================================================

集成项目结构:

【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作  完整版+kibana管理ES的index操作

【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作  完整版+kibana管理ES的index操作

 

 ===================================================================================

一、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;





}
View Code

相关文章: