ElasticSearch全文搜索引擎之整合SpringBoot篇

    科技2022-08-04  98

    目录

    一、简介

    二、ElasticSearch整合SpringBoot

    三、总结


    一、简介

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

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

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

     

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

    高级API:Java High Level REST Client低级API:Java Low Level REST Client

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

    下面我们详细介绍如何将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-clientorg.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。 

     【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(); } } }

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

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

    可见,成功使用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

    Processed: 0.011, SQL: 8