目录
一、简介
二、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进行操作,因为高级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-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。
【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