SpringBoot项目ES6.8升级ES7.4.0

SpringBoot项目ES6.8.15 升级到 ES7.4.0

前言

由于公司内部资产统一整理,并且公司内部部署有多个版本的es集群,所以有必要将目前负责项目的ES集群升级到公司同一版本7.4.0。es6到es7的升级变化还是挺大的,因此在这里做一下简单记录,
注:升级方案需要根据实际项目来定,本升级方案可能不是最优,但目前来看应该是比较适合这个项目的

1. 依赖相关

1. SpringBoot版本:2.3.12.RELEASE

2. spring.data.elasticsearch:

旧版本
xml 复制代码
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>3.2.4.RELEASE</version>
</dependency>
新版本
xml 复制代码
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>4.0.9.RELEASE</version>
</dependency>
spring.data.elasticsearch和ElasticSearch版本对应关系

spring.data.elasticsearch和ElasticSearch版本对应关系

3. elasticsearch

移除org.elasticsearch.elasticsearch的依赖,直接使用spring.data.elasticsearch中的elasticsearch依赖

4. spring-boot-autoconfigure

移除spring-boot-autoconfigure依赖的版本

旧版本
xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-autoconfigure</artifactId>
	<version>2.2.4.RELEASE</version>
</dependency>
新版本
xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

2. mapping文件

升级es7.4后,索引的mapping文件发生了相应的变化,移除了type字段,如下所示

旧版本

json 复制代码
{
  "index_name": {
    "mappings": {
      "part": {
        "properties": {
          "brandCode": {
            "type": "keyword"
          },
          "brandName": {
            "type": "keyword"
          },
          "brands": {
            "type": "keyword"
          },
          "enable": {
            "type": "boolean"
          }
        }
      }
    }
  }
}

新版本

json 复制代码
{
  "index_name": {
    "mappings": {
      "properties": {
        "brandCode": {
          "type": "keyword"
        },
        "brandName": {
          "type": "keyword"
        },
        "brands": {
          "type": "keyword"
        },
        "enable": {
          "type": "boolean"
        }
      }
    }
  }
}

2. 配置文件

java 复制代码
spring.elasticsearch.rest.uris=集群地址
spring.elasticsearch.rest.username=账号
spring.elasticsearch.rest.password=密码

3. 代码修改

  1. elasticsearchTemplate 修改为elasticsearchRestTemplate
  2. SearchQuery 修改为NativeSearchQuery
  3. repo.search 修改为 elasticsearchRestTemplate.search
  4. 之前的NativeSearchQueryBuilder可以直接设置索引别名,升级之后不支持,需要在elasticsearchRestTemplate.search()方法中通过IndexCoordinates.of(alias)参数来设置索引
  5. elasticsearchRestTemplate.search()方法返回值也有相应的变化,需要自行探索修改

代码示例

旧版本
java 复制代码
PartsResult result = new PartsResult();
BoolQueryBuilder builder = builderPart(param);
SearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withIndices(alias)
        .withQuery(builder)
        .build();
long time = System.currentTimeMillis();
Page<SearchPart> pageResult = repo.search(searchQuery);
log.debug("search oe object time:{}",System.currentTimeMillis()-time);
新版本
java 复制代码
PartsResult result = new PartsResult();
BoolQueryBuilder builder = builderPart(param);
NativeSearchQuery  searchQuery = new NativeSearchQueryBuilder()
        .withQuery(builder)
        .build();
long time = System.currentTimeMillis();
SearchHits<SearchPart> search = elasticsearchRestTemplate.search(searchQuery, SearchPart.class, IndexCoordinates.of(alias));
List<SearchPart> parts = new ArrayList<>();
if (search.hasSearchHits()){
    for (SearchHit<SearchPart> searchHit : search.getSearchHits()) {
        SearchPart content = searchHit.getContent();
        parts.add(content);
    }
}
log.debug("search oe object time:{}",System.currentTimeMillis()-time);

4. 总结

目前仅仅只是升级完之后可以正常使用,还需要进一步进行代码优化和错误排查。本篇文章旨在为大家升级的时候提供一个参考,有任何问题可以在评论区或者私信交流。

相关推荐
皮皮林5512 小时前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
Elasticsearch14 小时前
需要知道某个同义词是否实际匹配了你的 Elasticsearch 查询吗?
elasticsearch
用户908324602733 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
洛森唛3 天前
ElasticSearch查询语句Query String详解:从入门到精通
后端·elasticsearch
用户8307196840823 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解3 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解3 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记4 天前
Spring Boot Web MVC配置详解
spring boot·后端
洛森唛4 天前
Elasticsearch DSL 查询语法大全:从入门到精通
后端·elasticsearch
初次攀爬者4 天前
Kafka 基础介绍
spring boot·kafka·消息队列