记一次springboot整合es的开发过程

背景

记一次springboot整合es的业务开发

环境

jdk版本: 1.8
springboot: 2.3.4
spring-data-elasticsearch: 4.0.5
es: 7.5.1

版本问题

springboot\spring-data-elasticsearch\es三者的版本需要适配, 具体对应关系见spring官网

大致流程

1\加依赖\写配置
1\创建es索引对应的bean, springboot整合es后, 会通过这个bean自动帮你建立index和mapping
2\添加document
3\条件查询es
4\更新或删除document

配置

主要就是连接es需要几个配置, yaml的格式就不写了
spring.elasticsearch.rest.uris=127.0.0.1:9200
spring.elasticsearch.rest.password
spring.elasticsearch.rest.username
spring.elasticsearch.rest.read-timeout

索引及映射

通过类注解和属性注解, 来配置索引:
官方api文档
参考文章

类注解@Document:

属性名 解释
indexName 索引名称,小驼峰,最长255字节
shards 分片数,默认1.和集群相关, 影响性能. (因为项目的es不是集群, 数据量也小(一个index就几十MB), 就用的默认值)
replicas 副本,也是默认1.(同上,用的默认值)
createIndex 默认为true, 若es中没有这个索引,启动项目时spring会帮你创建index.
useServerConfiguration 默认false, 是否使用服务器的配置创建索引. (没实践过,嗟来之食)
其他参数都是Used for index creation.不知道有啥用

属性注解
1\ @Field (data.elasticsearch.annotations)

属性名 解释
name 设置字段名,不设置的话默认使用bean的字段名
value name的别名 ,平时都是用的value, 是否value 可以替代name ?
type 字段类型:使用FieldType, 类型很多. 参考
analyzer 设置使用的分词器, analyzer = “ik_max_word”
format DateFormat format() default DateFormat.none;使用DateFormat, 指定日期格式. 一大堆格式, 自己看文档吧.也可以自定义: 选择DateFormat.custom, 然后通过下面的pattern属性指定格式
pattern 设置格式, 如: yyyy-MM-dd HH:mm:ss
其他属性没用到, 附上官方文档

2\ @Id (data.annotation)
指定哪个字段作为id (必须得有id, 否则报错: No id property found for class)
当然, 指定id既可以使用@id注解
在这里插入图片描述
, 也可以将属性直接命名为id
在这里插入图片描述

分词器

上述说到@Field可以对某一属性指定分词器进行分词, 当然type要求是text, 才能在写入数据的时候对这个字段进行分词. 这里使用了ik和ngram两个分词器

1\ ik分词器:
用于中文内容的分词 ik需要自己安装, 注意要和es版本一致, github下载地址

两种分词算法
ik_max_word 细粒度: “张三是人"分成了"张三” “三” “三是” “是” “人”
ik_smart 粗粒度: “张三是人"分成了"张” “三是” “人”
ik_max_word
ik_smart

ik分词安装好后就可以直接使用了.

2\ ngram分词器 :
由于要对数字的string字段进行分词, 因此定义了ngram分词. ik对数字的字符串是不分词的

ik分词结果
ngram分词(min_gram=1, max_gram=2)

ngram分词器需要在索引的setting中自己配置, 如下是脚本的形式配置. 分词器相关的配置参数可以参考ElasticSearch 解析机制常见用法库 之 Tokenizer常用用法

put students
{
   
  "mappings": {
   
    "properties": {
   
      "name": {
   
        "type": "text",
        "analyzer": "ngram_analyzer"
      }
    }
  },
  "settings": {
   
    "analysis": {
   
      "analyzer": {
   
        "ngram_analyzer": {
   
          "tokenizer": "ngram_tokenizer"
        }
      },
      "tokenizer": {
   
        "ngram_tokenizer": {
   
          "type": "ngram",
          "min_gram": 1,
          "max_gram": 2,
          "token_chars": [
            "letter",    //字符
            "digit"      //数字
          ]
        }
      }
    }
  }
}

当然java开发肯定要有java代码的形式来写. 这里介绍两种方法:

1、因为setting是要在索引创建的时候设置, 可以通过ElasticsearchRestTemplate来手动创建索引, 这样就可以自定义settings的内容了.注意要在ElasticEntity中注解 @Document(createIndex = false)不自动创建索引
参考博客: springboot2.x 整合 elasticsearch 创建索引的方式

/*
* 实现CommandLineRunner的目的是在项目启动的时候就自动执行, 注意要在ElasticEntity中注解
* @Document(createIndex = false)不自动创建索引
*/
public class EsIndexConfiguration implements CommandLineRunner 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个非常流行的Java web开发框架,Elasticsearch是一款开源的搜索引擎,两者的结合可以提供非常强大的搜索功能。下面是整合步骤: 1. 引入Elasticsearch依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置Elasticsearch连接信息 在application.properties文件中添加以下配置: ```properties spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.cluster-nodes=localhost:9300 ``` 其中,cluster-name和cluster-nodes分别指定Elasticsearch集群名称和连接地址。 3. 定义Elasticsearch数据模型 使用@Entity注解标注Java类,将其映射到Elasticsearch中的一个数据类型。例如: ```java @Entity public class Book { @Id private String id; private String name; private String author; // getters and setters } ``` 4. 定义Elasticsearch数据访问接口 使用ElasticsearchRepository接口,继承该接口即可获得Elasticsearch数据访问的基本方法。例如: ```java public interface BookRepository extends ElasticsearchRepository<Book, String> { List<Book> findByName(String name); } ``` 5. 使用Elasticsearch数据访问接口 在业务逻辑中使用BookRepository接口中定义的方法进行数据访问。例如: ```java @Service public class BookService { @Autowired private BookRepository bookRepository; public List<Book> search(String keyword) { return bookRepository.findByName(keyword); } } ``` 以上就是Spring Boot整合Elasticsearch的基本步骤。通过以上步骤,可以快速搭建一个基于Elasticsearch的高效搜索引擎。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值