接上篇《7、文档操作》
上一篇我们学习了ElasticSearch的文档的新增、查询、删除和修改操作。本篇我们开始进行代码实操,使用Java语言编写的RestClient进行文档及索引的操作。
一、引言
在前面我们已经学习了如何利用DSL语句去操作ElasticSearch,不管是索引库还是文档的增删改查,都可以做。但是技术是要使用在项目中的,作为Java程序员,肯定是需要通过Java代码去调用ElasticSearch的相关操作的,要想实现这些,就必须使用官方的RestClient程序。那么RestClient究竟是什么呢?我们接下来去逐步学习它。
二、什么是RestClient
Elasticsearch官方提供的RestClient是一个用于与Elasticsearch集群进行HTTP通信的客户端(支持Java、PHP、Python、Ruby等多种语言)。它是Elasticsearch推荐的Java客户端之一,专为高性能和易用性设计。与传统的TransportClient不同,RestClient基于HTTP协议,兼容性更好,支持Elasticsearch的所有版本。
官方文档:https://www.elastic.co/guide/en/elasticsearch/client/index.html
其中Java客户端的操作文档:
https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/index.html
(一)特点
1、基于HTTP协议:使用RESTfulAPI与Elasticsearch集群通信,兼容Elasticsearch的所有版本。不需要依赖Elasticsearch的内部协议,减少了版本兼容性问题。
2、轻量级和高性能:使用ApacheHttpClient作为底层实现,支持连接池、请求重试、超时设置等功能。对异步和非阻塞I/O也支持,适合高并发场景。
3、易于集成:提供同步和异步两种请求方式。支持JSON数据的序列化和反序列化。
4、可扩展性强:支持自定义请求拦截器、失败重试策略、节点选择器等。
5、官方维护:由Elasticsearch官方团队维护,更新及时,文档齐全。
(二)使用场景
1、在Java应用程序中与Elasticsearch集群进行交互。
2、需要高性能、低延迟的搜索和索引操作。
3、需要与多个Elasticsearch版本兼容。
(三)Java程序依赖和示例
在Java中要使用RestClient,需要在项目中添加以下Maven依赖:
XML
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.17.0</version> <!-- 根据 Elasticsearch 版本选择 -->
</dependency>
以下是一个简单的示例,演示如何使用RestClient连接到Elasticsearch集群并执行搜索操作:
java
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
public class ElasticsearchRestClientExample {
public static void main(String[] args) {
// 1. 创建 RestClient 客户端
try (RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http") // Elasticsearch 地址
)
)) {
// 2. 创建一个获取索引信息的请求
GetIndexRequest request = new GetIndexRequest("my_index"); // 替换为你的索引名称
// 3. 执行请求并获取响应
GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
// 4. 处理响应
System.out.println("索引存在: " + response.getIndices().length > 0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
核心组件
●RestClient:底层HTTP客户端,负责与Elasticsearch集群通信。支持多节点配置,自动处理节点故障和负载均衡。
●RestHighLevelClient:高级客户端,封装了常用的Elasticsearch操作(如索引、搜索、聚合等)。提供了更友好的 API,适合大多数场景。
●RequestOptions:用于配置请求的通用选项,如超时时间、请求头等。
●HttpHost:表示Elasticsearch集群中的一个节点,包含协议、主机名和端口。
三、学习计划
我们将通过以下计划学习RestClient如何操作索引库:
利用JavaRestClient实现创建、删除索引库,判断索引库是否存在。
根据课前资料提供的酒店数据创建索引库,索引库名为hotel,mapping属性根据数据库结构定义。基本步骤如下:
1.导入课前资料Demo
2.分析数据结构,定义mapping属性
3.初始化JavaRestClient
4.利用JavaRestClient创建索引库
5.利用JavaRestClient删除索引库
6.利用JavaRestClient判断索引库是否存在
四、导入课前资料Demo
首先导入课前资料提供的数据库数据以及Java的Demo代码:
下载链接:
https://pan.baidu.com/s/1vR7UnF09shi0AVjEOg0OEg 提取码: 5ubu
(一)导入数据库
然后我们将其中的tb_hotel.sql下载下来,在我们的电脑上安装好Mysql数据库,以及操作数据库的客户端软件(我用的是sqlyog),然后在数据库客户端创建一个名为"heima"的数据库(Demo中的数据库名是这个,如果自己想另外起名,记得修改Demo中的数据库名):
创建完数据库后,导入相关的SQL脚本:
然后我们就可以看到在heima数据库中,有一张名为tb_hotel的表:
(二)导入Java程序
我们打开Java编译器(这里我使用的是IntelliJ IDEA 2022.3.3),点击"文件-打开..."操作:
打开解压后的hotel-demo工程,目录如下:
然后点击application.yaml配置文件,修改一下datasource的配置内容,使其和你们本地数据库连接端口,账号密码一致。另外建议将默认的com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver。
(三)主目录概述
主目录如下:
在src目录下,我们有一个main文件夹,这是Java项目的主要源代码存放位置。在main文件夹下,有一个java文件夹,专门存放Java源代码。再往下,我们有一个cn.itcast.hotel文件夹,这是我们的项目包名,所有的源代码文件都在这个包或其子包中。
在cn.itcast.hotel文件下,我们有五个子文件夹:constants、mapper、pojo、service、web,以及一个HotelDemoApplication文件。
1、constants文件夹
这个文件夹下有一个HotelIndexConstants文件,用于存放一些常量。例如,Elasticsearch索引的映射模板(Mapping Template)就定义在这里。
java
package cn.itcast.hotel.constants;
public class HotelIndexConstants {
public static final String MAPPING_TEMPLATE = "{\n" +
" \"mappings\": {\n" +
" \"properties\": {\n" +
" \"id\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
//其他代码省略...
};
}
MAPPING_TEMPLATE是一个字符串常量,定义了Elasticsearch索引的映射信息。例如,这里指定了id字段的类型为keyword。这种常量管理方式使得我们的代码更加清晰、易于维护。
2、mapper文件夹
在mapper文件夹下,有一个HotelMapper接口文件。这是MyBatis Plus的Mapper接口,用于操作数据库中的tb_hotel表。
java
package cn.itcast.hotel.mapper;
import cn.itcast.hotel.pojo.Hotel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface HotelMapper extends BaseMapper<Hotel> {
}
HotelMapper接口继承了BaseMapper<Hotel>,这意味着我们可以直接使用MyBatis Plus提供的一系列CRUD(创建、读取、更新、删除)方法,而无需自己编写SQL语句。
3、pojo文件夹
pojo文件夹下存放的是Java实体类,包括Hotel、HotelDoc、PageResult和RequestParams四个文件。其中:
Hotel类对应于数据库中的tb_hotel表。
HotelDoc类是一个专门用于Elasticsearch文档存储和检索的Java实体类。这个类提供了一个接受Hotel对象的构造函数,这个构造函数会自动将Hotel对象中的属性值复制到HotelDoc对象中。这样做可以方便地将数据库中的酒店数据转换为Elasticsearch文档数据。
PageResult类是一个用于分页结果封装的Java实体类。它通常用于封装从数据库或Elasticsearch中检索到的分页数据。
RequestParams类是一个用于封装请求参数的Java实体类。它通常用于封装前端发送给后端的查询条件。
4、service文件夹
在service文件夹下,有一个impl文件夹和一个IHotelService接口文件。impl文件夹下是IHotelService接口的实现类HotelService。
服务层(Service Layer)是业务逻辑的核心部分,通常包含业务方法,用于处理具体的业务需求。IHotelService定义了业务接口,而HotelService则是这些接口的具体实现。
5、web文件夹
在web文件夹下,有一个HotelController文件。这是Spring MVC的控制器类,用于处理HTTP请求。
控制器类通常负责接收客户端的请求,调用服务层的方法处理业务逻辑,然后返回响应结果给客户端。在这个项目中,HotelController将负责处理与酒店相关的HTTP请求。
5、HotelDemoApplication类
这个类是Spring Boot应用的启动类,它包含了应用的主要配置和启动逻辑。
(四)测试目录概述

测试目录下,是用于单点测试的程序,主要就是来测试我们的文档、索引以及搜索的程序。其中:
HotelDocumentTest使用来测试使用RestClient操作文档的代码。
HotellndexTest使用来测试使用RestClient操作索引的代码。
HotelSearchTest使用来测试使用RestClient操作搜索的代码。
至此,我们对于RestClient的概念介绍,以及对于本节课程的计划,和Demo的导入以及描述全部介绍完毕,下一篇我们继续剖析即将要操作的tb_hotel表结构的具体含义,以及我们做索引需要考虑的具体问题。
参考:《黑马Elasticsearch全套教程》
转载请注明出处:https://blog.csdn.net/acmman/article/details/145671990