解决SpringBoot ElasticSearch6.x升级7.x产生的问题

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 解决SpringBoot ElasticSearch6.x升级7.x产生的问题

前言


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

注:原SprintBoot版本为2.1.x。 连接ElasticSearch使用的是spring-boot-starter-data-elasticsearch

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


配置修改


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/><!-- lookup parent from repository -->
</parent>


ES连接配置修改

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

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

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

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


ElasticsearchTemplate升级

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

@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;


案例源码


  • pom文件
<project xmlns="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")
publicclass LogDoc implements Serializable {
    privatestaticfinallong serialVersionUID = 6320548148250372657L;
    @Id
    private String id;
    private String logLevel;
    private String module;
    private String system;
    private String refCode;
    private String response;
    private String parm;
    private String message;
    privatelong logTime;
}
  • 建立LogRepository,操作底层查询
@Repository
publicinterface LogRepository extends ElasticsearchRepository<LogDoc,String> {
}
  • 建立接口层LogService
publicinterface LogService {
    /**
     * 根据ID获取对应的实体
     * @param id 日志id
     * @return
     */
    LogDoc getById(String id);
    /**
     * 根据时间范围查找指定格式的日志
     * @author javadaily
     * @date 2019/9/21 9:24
     * @param minRange 开始时间
     * @param maxRange 结束时间
     * @param logLevel 日志级别
     * @return 日志列表
     */
    List<LogDoc> findRangeLogByLevel(DateTime minRange,DateTime maxRange,String logLevel);
}
  • 建立接口实现层LogServiceImpl
/**
 * @author javadaily
 * @date 2019/9/10 15:12
 */
@Service
publicclass LogServiceImpl implements LogService {
    @Autowired
    private LogRepository logRepository;
    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;
    @Override
    public LogDoc getById(String id) {
        Optional<LogDoc> logOptional = logRepository.findById(id);
        return logOptional.orElse(null);
    }
    @Override
    public List<LogDoc> findRangeLogByLevel(DateTime minRange, DateTime maxRange, String logLevel) {
        //需要强制转换成小写
        logLevel = logLevel.toLowerCase();
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(boolQuery()
                        //module,system 必须有值才能告警
                        .must(existsQuery("module"))
                        .must(existsQuery("system"))
                        .must(termQuery("logLevel", logLevel))
                        .must(rangeQuery("logTime")
                                .from(minRange.getMillis())
                                .to(maxRange.getMillis())))
                .build();
        return elasticsearchRestTemplate.queryForList(searchQuery, LogDoc.class);
    }
}

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


好了,各位朋友们,本期的内容到此就全部结束啦,能看到这里的同学都是优秀的同学,下一个升职加薪的就是你了!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
存储 自然语言处理 BI
|
2月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
131 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
1月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
38 1
|
2月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
212 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
2月前
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
111 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
|
2月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
53 0
|
2月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
36 0
|
4月前
|
网络协议 Java API
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
这篇文章介绍了如何在SpringBoot中整合Elasticsearch-Rest-Client,并提供了保存数据和进行复杂检索的测试示例。
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
|
4月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
135 0
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
4月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
62 0