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:

旧版本
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>3.2.4.RELEASE</version>
</dependency>
新版本
<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依赖的版本

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

2. mapping文件

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

旧版本

{
  "index_name": {
    "mappings": {
      "part": {
        "properties": {
          "brandCode": {
            "type": "keyword"
          },
          "brandName": {
            "type": "keyword"
          },
          "brands": {
            "type": "keyword"
          },
          "enable": {
            "type": "boolean"
          }
        }
      }
    }
  }
}

新版本

{
  "index_name": {
    "mappings": {
      "properties": {
        "brandCode": {
          "type": "keyword"
        },
        "brandName": {
          "type": "keyword"
        },
        "brands": {
          "type": "keyword"
        },
        "enable": {
          "type": "boolean"
        }
      }
    }
  }
}

2. 配置文件

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()方法返回值也有相应的变化,需要自行探索修改

代码示例

旧版本
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);
新版本
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. 总结

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

上一篇:Flutter Row组件实战案例


下一篇:Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)