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. 总结

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

相关推荐
Dragon~Snow1 小时前
Linux Centos9 安装 Elasticsearch
linux·elasticsearch·jenkins
熊延1 小时前
麒麟V10系统安装部署elasticsearch
linux·运维·服务器·elasticsearch·搜索引擎·全文检索
玄同7652 小时前
Git常用命令指南
大数据·git·elasticsearch·gitee·github·团队开发·远程工作
汤姆yu3 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶4 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
Elasticsearch4 小时前
弥合差距:从云原生到大型机的端到端可观测性
elasticsearch
biyezuopinvip5 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide5 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
figo10tf6 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva6 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端