目录

一、简介

二、ElasticSearch整合SpringBoot

三、总结


一、简介

通过前面几篇文章的学习,基本上对es常用的搜索命名有一定的认识了,但是实际工作中却很少使用构造一大串json结构化查询进行操作,更多的使用es高级客户端API操作。本篇文章将es整合springboot项目中,使用Java API操作es索引等。

elasticsearch官方文档:https://www.elastic.co/guide/index.html

springboot 全局搜索 springboot整合es搜索_Rest API

如上图,就是elasticsearch提供的客户端功能,点击进去,可以看到es提供了很多客户端功能:

 

springboot 全局搜索 springboot整合es搜索_es_02

截止到现在,Java REST Client版本已经更新到7.9了,并且可以看到Java API已经过时,不推荐使用了,由于笔者本机装的es版本是7.6,所以这里我们选择的是Java REST Client 7.6版本的,尽可能保持一致。Java REST Client提供了两种API:

我们一般使用高级API进行操作,因为高级API也是对低级API的封装,使用起来更方便。

springboot 全局搜索 springboot整合es搜索_elasticsearch_03

下面我们详细介绍如何将es整合进SpringBoot项目中。

二、ElasticSearch整合SpringBoot

【a】相关依赖(Maven存储库)

高级Java REST客户端托管在Maven Central上,所需的最小Java版本是1.8。高级REST客户端遵循与Elasticsearch相同的发布周期,用所需的客户端版本替换该版本。下面介绍如何使用maven作为依赖项管理器来配置依赖项,将以下内容添加到您的pom.xml文件中:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.6.2</version>
</dependency>

高级Java REST客户端依赖于以下artifacts及其传递依赖关系:

  • org.elasticsearch.client:elasticsearch-rest-client
  • org.elasticsearch:elasticsearch

完整的pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<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.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.wsh.elasticsearch</groupId>
    <artifactId>wsh-elasticsearch-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>wsh-elasticsearch-api</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <!--自定义版本依赖,保证和本机安装es版本一致-->
        <elasticsearch.version>7.6.1</elasticsearch.version>
    </properties>

    <dependencies>
        <!--spring-boot-starter-data-elasticsearch依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

注意:springboot2.5默认集成的es版本是6.8版本,由于我们本机使用的是7.6。所以一定要保证我们导入的es依赖和我们本机安装的es版本一致,即我们需要自定义版本依赖,保证和本机安装es版本一致。

在pom.xml中加入如下自定义版本依赖: 

<properties>
        <java.version>1.8</java.version>
        <!--自定义版本依赖,保证和本机安装es版本一致-->
        <elasticsearch.version>7.6.1</elasticsearch.version>
    </properties>

添加完成后,我们刷新maven依赖,由下图可见,依赖的es版本已经是7.6。 

springboot 全局搜索 springboot整合es搜索_Rest API_04

 【b】初始化(Initialization)

RestHighLevelClient高级客户端实例需要一个REST低级客户端构建器来创建,在Spring中我们通过一个配置类进行配置,如下所示:

package com.wsh.elasticsearch.wshelasticsearchapi.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description 自定义es客户端配置信息
 * @Date 2020/10/5 9:34
 * @Author weishihuai
 * 说明: 
 */
@Configuration
public class CustomElasticSearchConfiguration {

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

}

【c】测试

这里我们测试创建一个名为"student_info"的索引库,代码如下:

@SpringBootTest
class WshElasticsearchApiApplicationTests {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**
     * 测试创建索引
     */
    @Test
    void createIndex() {
        //创建索引请求
        CreateIndexRequest studentInfoIndexRequest = new CreateIndexRequest("student_info");
        //执行请求
        try {
            //获取响应
            CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(studentInfoIndexRequest, RequestOptions.DEFAULT);
            System.out.println(createIndexResponse);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

运行单元测试,可以看到控制台打印返回的创建索引响应结果:

springboot 全局搜索 springboot整合es搜索_es_05

然后我们去es-head插件中查看索引是否创建成功 :

springboot 全局搜索 springboot整合es搜索_搜索引擎_06

可见,成功使用es高级客户端API创建了一个简单的索引,也说明我们的es也成功整合进SpringBoot中。

三、总结

本篇文章主要介绍了如何将es集成到我们的springboot项目中,并使用es的高级客户端API验证环境是否搭建成功,下一篇文章将总结一下es高级客户端API常见的一些操作等等。由于笔者水平有限,如文中有不对之处,还望指正,相互学习,一起进步!

参考资料:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.6/java-rest-high-compatibility.html