ElasticSearch7.x 升级后SpringBoot连不上?

简介: 本文主要讲述使用ElasticSearch6.x 升级到 ElasticSearch7.x后所需要的修改以及案例代码。

前言


原来项目中使用的ElasticSearch版本6.8升级到了7.5.1,且开启了x-pack安全认证,导致原来的查询接口全部使用不了。


注:原SprintBoot版本为2.1.x。

连接ElasticSearch使用的是spring-boot-starter-data-elasticsearch


配置修改

SpringBoot版本升级


在SpringBoot2.2.x版本才支持ElasticSearch7.x,所以我们先需要升级SpringBoot版本。


<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/><!--lookupparentfromrepository--></parent>


ES连接配置修改


原来spring-boot-starter-data-elasticsearch连接ES的配置如下:


spring.data.elasticsearch.cluster-nodes=172.31.0.207:9300spring.data.elasticsearch.cluster-name=elk-clusterspring.data.elasticsearch.repositories.enabled=true


升级后主要使用rest接口进行连接,由于开启了x-pack认证,所以需要修改es的账号密码,修改后配置如下:


spring.elasticsearch.rest.uris=172.31.0.207:9300spring.elasticsearch.rest.username=elasticspring.elasticsearch.rest.password=changeme


ElasticsearchTemplate升级


原来spring-boot-starter-data-elasticsearch连接ES主要使用ElasticsearchTemplate进行操作,新版本主要使用ElasticsearchRestTemplate


@AutowiredprivateElasticsearchRestTemplateelasticsearchRestTemplate;


案例源码


  • pom文件


<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version></parent><groupId>com.jianzh5</groupId><artifactId>esalarm</artifactId><version>0.0.1-SNAPSHOT</version><name>esalarm</name><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--ES--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency></project>


  • 建立ElasticSearch实体类LogDoc


@Data@Document(indexName="alarm-*",type="_doc")
publicclassLogDocimplementsSerializable {
privatestaticfinallongserialVersionUID=6320548148250372657L;
@IdprivateStringid;
privateStringlogLevel;
privateStringmodule;
privateStringsystem;
privateStringrefCode;
privateStringresponse;
privateStringparm;
privateStringmessage;
privatelonglogTime;
}


  • 建立LogRepository,操作底层查询


@RepositorypublicinterfaceLogRepositoryextendsElasticsearchRepository<LogDoc,String> {
}


  • 建立接口层LogService


publicinterfaceLogService {
/*** 根据ID获取对应的实体* @param id 日志id* @return*/LogDocgetById(Stringid);
/*** 根据时间范围查找指定格式的日志* @author javadaily* @date 2019/9/21 9:24* @param minRange 开始时间* @param maxRange 结束时间* @param logLevel 日志级别* @return 日志列表*/List<LogDoc>findRangeLogByLevel(DateTimeminRange,DateTimemaxRange,StringlogLevel);
}


  • 建立接口实现层LogServiceImpl


/*** @author javadaily* @date 2019/9/10 15:12*/@ServicepublicclassLogServiceImplimplementsLogService {
@AutowiredprivateLogRepositorylogRepository;
@AutowiredprivateElasticsearchRestTemplateelasticsearchRestTemplate;
@OverridepublicLogDocgetById(Stringid) {
Optional<LogDoc>logOptional=logRepository.findById(id);
returnlogOptional.orElse(null);
    }
@OverridepublicList<LogDoc>findRangeLogByLevel(DateTimeminRange, DateTimemaxRange, StringlogLevel) {
//需要强制转换成小写logLevel=logLevel.toLowerCase();
SearchQuerysearchQuery=newNativeSearchQueryBuilder()
                .withQuery(boolQuery()
//module,system 必须有值才能告警                        .must(existsQuery("module"))
                        .must(existsQuery("system"))
                        .must(termQuery("logLevel", logLevel))
                        .must(rangeQuery("logTime")
                                .from(minRange.getMillis())
                                .to(maxRange.getMillis())))
                .build();
returnelasticsearchRestTemplate.queryForList(searchQuery, LogDoc.class);
    }
}


使用ElasticsearchRepositoryElasticsearchRestTemplate对ES进行操作,ElasticsearchRestTemplate的功能比较强大,能支持更为复杂的查询,大家可以根据具体情况选择。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
4月前
|
消息中间件 NoSQL Java
spring boot2升级boot3指南
本文介绍了如何将Spring Boot 2.x升级至Spring Boot 3.x,涵盖使用OpenRewrite自动化重构工具进行代码转换、依赖版本升级、配置属性调整及常见问题处理等内容,帮助开发者高效完成升级工作。
1956 6
存储 JSON Java
661 0
|
8月前
|
druid Java 关系型数据库
Spring Boot与Druid升级解决方案
好的,我需要帮助用户解决他们遇到的数据库连接问题,并升级项目的依赖。首先,用户提供的错误信息是关于Spring Boot应用在初始化数据源时抛出的异常,具体是Druid连接池验证连接失败。同时,用户希望升级项目的依赖版本。
821 10
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
258 1
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
903 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
421 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
716 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
|
存储 自然语言处理 BI
从 Elasticsearch 到 Apache Doris 腾讯音乐内容库升级,统一搜索分析引擎,成本直降 80%
实现写入性能提升 4 倍、使用成本节省达 80% 的显著成效
545 1
从 Elasticsearch 到 Apache Doris 腾讯音乐内容库升级,统一搜索分析引擎,成本直降 80%
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
345 0