Springboot 2.5.x整合ElasticSearch 7.1x

Posted Dream_it_possible!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot 2.5.x整合ElasticSearch 7.1x相关的知识,希望对你有一定的参考价值。

目录

一、ElasticSearch介绍

二、Spring Boot 整合ElasticSearch

1. SpringBoot版本

2. ElasticSearch服务器版本 

三、调用ElasticSearch

1. 配置elasticSearch客户端

2. RestFul API使用


一、ElasticSearch介绍

        ElasticSearch是一个分布式搜索引擎,能与SpringBoot、Python等框架做集成 , 可扩展性好。 另外elaticsearch官方提供了可视化的图表工具kibana, 能够让您的搜索数据展示的更友好,ElasticSearch提供一系列Rest API给客户端索引,  他能够对海量数据下的指定搜索能快速的做出响应。

        官网说明:  ElasticSearch是一个基于JSON的分布式搜索和分析引擎。

        Spring官网提供了spring data elasticsearch工具包供开发者使用,用SpringBoot开发时,我们一定要注意Springboot版本与ElasticSearch版本对应关系,如果版本对不上,在调用时,可能会发生问题。

elasticsearch与springboot版本对应关系

注:  在ElasticSearch 7以后,Spring data建议采用High-level REST client。 

二、Spring Boot 整合ElasticSearch

         通过版本关系图,我们需要准备Springboot版本与elasticsearch客户端,我们就使用图中最第一条,即最新版本。

1. SpringBoot版本

        Spring Boot 版本采用2.5.6, 可以在2.5.x中选一个即可。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.6</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

data-elasticsearch不用指定版本,因为是依赖Springboot,Springboot包下载好后,会自定给你指定data-elasticsearch的版本:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

         如上图,maven会自动给你下载4.2.6版本的包,正好也符合Spring官网提供的版本关系图。

2. ElasticSearch服务器版本 

        Spring官网推荐的版本是7.15.2, 在这里推荐一个国内加速下载网站,华为云,地址如下:

Index of elasticsearch-local

下载64位版本: 

 

注: 解压的目录不要放到program files目录下,因为低版本的elasticsearch运行时可能会出现没有权限写入的问题。

解压后到E盘后,启动elasticsearch服务器, 以管理员的身份进行运行:

 如果能看到红框框里的内容,说明就启动成功了。

三、调用ElasticSearch

1. 配置elasticSearch客户端

        刚提到Spring官网在elasticsearch 7以后,推荐我们使用high-leve-client,那我们就使用RestHighLevelClient。

        添加配置类ElasticSearchClientConfig,  可将uri放入到配置文件里,为了方便测试,在这里写固定 http://localhost:9200。

package org.spring.data.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchClientConfig 

    @Value("$spring.elasticsearch.rest.uris")
    private String urls;


    @Bean
    public RestHighLevelClient restHighLevelClient() 
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost",9200, "http")
                )
        );
        return restHighLevelClient;
    

 spring.elasticsearch.rest.uris=http://localhost:9200

2. RestFul API使用

首先引入Springboot test 相关依赖:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
</dependency>
     

<dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
</dependency>

Spring data ElasticSearch提供了的增、删、改、查的包装类, 分别是CreateIndexRequest、DeleteIndexRequest、GetIndexRequest、UpdateRequest,另外不推荐使用过时的API,例如: 

 @Deprecated
    public boolean exists(org.elasticsearch.action.admin.indices.get.GetIndexRequest request, RequestOptions options) throws IOException 
        return (Boolean)this.restHighLevelClient.performRequest(request, IndicesRequestConverters::indicesExist, options, RestHighLevelClient::convertExistsResponse, Collections.emptySet());
    

可以从导包来查看是否过时:org.elasticsearch.action.admin.indices.get, 推荐使用的GetIndexRequest是在org.elasticsearch.client.indices包下。

package org.spring.data;

import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.elasticsearch.client.RequestOptions;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;

@SpringBootTest
class ElasticsearchApplicationTests 

    @Test
    void contextLoads() 
    


    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**
     * create
     * @throws IOException
     */
    @Test
    public void testCreateIndex() throws IOException 
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("test");
        CreateIndexResponse response = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
        System.out.println(response);
    

    /**
     * exist
     *
     * @throws IOException
     */
    @Test
    public void testExistIndex() throws IOException 
        GetIndexRequest request = new GetIndexRequest("test");
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    

    /**
     *  delete
     */
    @Test
    public void deleteIndex() throws IOException 
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("test");
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    


 如果都测试成功,那么表示连上了elasticsearch, Spring boot整合elasticsearch成功。

以上是关于Springboot 2.5.x整合ElasticSearch 7.1x的主要内容,如果未能解决你的问题,请参考以下文章

Springboot整合Elastic-Job

#yyds干货盘点# springboot整合Elastic Job实现分片配置定时任务

elasticjob学习一:simplejob初识和springboot整合

springboot与elasticsearch整合

springboot与elasticsearch整合

springboot整合elasticsearch