这篇文章,主要介绍SpringBoot框架如何集成ElasticSearch数据库。
目录
一、SpringBoot集成ES
1.1、ElasticSearch介绍
1.2、引入ES依赖
1.3、实例化ES对象
1.4、创建测试控制器
一、SpringBoot集成ES
1.1、ElasticSearch介绍
ElasticSearch是一款分布式,基于Restful风格的文档搜索引擎,ES是一款非结构化的文档型数据库,它可以实现海量数据的快速搜索和分析。elasticsearch提供了多种语言的支持,例如:Java、C、Python等等,不同的编程语言要操作ES数据库,那就需要使用不同的编程语言实现一个ES客户端程序,然后通过ES数据库提供的Restful风格的API操作数据库。
ES官方提供了两种Java语言实现的客户端,分别如下所示:
- elasticsearch-rest-client低级客户端:这个客户端实现的功能相当简单,只是提供了ES的一些基本操作。
- elasticsearch-rest-high-level-client高级客户端:高级客户端是基于低级客户端实现的,提供了更加多的功能(实际开发里面也是采用这种客户端比较多)。
下面具体介绍下,SpringBoot框架如何集成ES数据库。
注意:这篇文章采用的ES数据库版本是【7.13.0】,不同版本的数据库,可能会存在不同的差别。
- ES版本是【5.x】之前,是有type类型的概念,一个Index下面可以有多个type类型。
- ES版本是【6.x】时候,规定一个index类型只能够有一个type类型。
- ES版本从【7.x】开始,就已经剔除了type的概念,所以index索引下就是doc文档。
下载地址【Elasticsearch 7.13.0 | Elastic】。
1.2、引入ES依赖
- 如果是使用低级客户端,那就只需要引入【elasticsearch-rest-client】依赖即可。
<!-- 引入 es 低级客户端 rest-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</dependency>
- 如果是使用高级客户端,那就需要引入下面几个依赖。
- 【elasticsearch-rest-client】依赖。
- 【elasticsearch】依赖。
- 【elasticsearch-rest-high-level-client】依赖。
<!-- 引入 es 低级客户端 rest-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</dependency>
<!-- 引入 elasticsearch 依赖 -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>
<!-- 引入 rest-high-level-client 高级客户端依赖 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
高级客户端需要引入的依赖:【Dependencies | Java REST Client [7.17] | Elastic】。
注意:引入ES高级客户端,是基于elasticsearch项目开发,并且使用了elasticsearch-rest-client低级客户端,所以需要引入上面三个依赖。
1.3、实例化ES对象
实例化ES对象,就是需要在SpringBoot应用程序启动的时候,注入一个客户端对象存入IOC容器,之后使用的时候,只需要自动装配就可以使用了。
实例化官方步骤:Initialization | Java REST Client [7.17] | Elastic。
package com.spring.boot.demo.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author ZhuYouBin
* @version 1.0.0
* @Date: 2022/11/19 22:14
* @Description ES客户端配置类
*/
@Configuration
public class RestClientConfig {
@Bean(name = "highRestClient")
public RestHighLevelClient restHighLevelClient() {
// 1、创建IP地址对象: 这里就是写ES数据库的IP地址信息,如果有多个ES结点,那就可以写多个IP地址
// ES数据库,默认是9200端口
HttpHost httpHost = new HttpHost("localhost", 9200, "http");
// 2、创建低级客户端对象:
RestClientBuilder builder = RestClient.builder(httpHost);
// 3、创建 RestHighLevelClient 对象
return new RestHighLevelClient(builder);
}
}
HighRestClient高级客户端,内部会创建一个RestClient低级客户端对象来执行ES请求,RestClient内部会维护一个连接池,并且开启一些线程去执行ES请求,所以,当我们不再使用ES的时候,需要手动调用close()方法关闭这些线程。
1.4、创建测试控制器
package com.spring.boot.demo.controller;
import org.elasticsearch.client.IndicesClient;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
/**
* @author ZhuYouBin
* @version 1.0.0
* @Date: 2022/11/19 22:24
* @Description ES 测试类
*/
@RestController
@RequestMapping("/api/es")
public class TestController {
@Autowired
private RestHighLevelClient highRestClient;
@GetMapping("/createIndex")
public String createIndex() throws IOException {
// 创建索引请求对象
CreateIndexRequest createIndexRequest = new CreateIndexRequest("idx_name_2022");
// 获取索引客户端
IndicesClient indicesClient = highRestClient.indices();
// 执行创建索引的请求
CreateIndexResponse response = indicesClient.create(createIndexRequest, RequestOptions.DEFAULT);
// 获取响应信息
String index = response.index();
System.out.println("索引名称: " + index);
// 索引是否创建成功
boolean acknowledged = response.isAcknowledged();
System.out.println("索引是否创建成功: " + acknowledged);
return "success.";
}
}
启动工程,浏览器访问【http://localhost:8080/api/es/createIndex】,结果如下所示:
到此,SpringBoot集成ElasticSearch就成功啦。
综上,这篇文章结束了,主要介绍SpringBoot框架如何集成ElasticSearch数据库。