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. 代码修改
- elasticsearchTemplate修改为elasticsearchRestTemplate
- SearchQuery 修改为NativeSearchQuery
- repo.search 修改为 elasticsearchRestTemplate.search
- 之前的NativeSearchQueryBuilder可以直接设置索引别名,升级之后不支持,需要在elasticsearchRestTemplate.search()方法中通过IndexCoordinates.of(alias)参数来设置索引
- 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. 总结
目前仅仅只是升级完之后可以正常使用,还需要进一步进行代码优化和错误排查。本篇文章旨在为各人升级的时候提供一个参考,有任何题目可以在评论区大概私信交流。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |