目录
一、简介
二、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项目中。
【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