主页 > 创业  > 

【Elasticsearch入门到落地】8、RestClient操作索引库-基础介绍及导入demo

【Elasticsearch入门到落地】8、RestClient操作索引库-基础介绍及导入demo

接上篇《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的所有版本。 官方文档: .elastic.co/guide/en/elasticsearch/client/index.html 其中Java客户端的操作文档: .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依赖:

<dependency>     <groupId>org.elasticsearch.client</groupId>     <artifactId>elasticsearch-rest-client</artifactId>     <version>7.17.0</version> <!-- 根据 Elasticsearch 版本选择 --> </dependency>

以下是一个简单的示例,演示如何使用RestClient连接到Elasticsearch集群并执行搜索操作:

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代码: 下载链接:  pan.baidu /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)就定义在这里。

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表。

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全套教程》

转载请注明出处: blog.csdn.net/acmman/article/details/145671990

标签:

【Elasticsearch入门到落地】8、RestClient操作索引库-基础介绍及导入demo由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Elasticsearch入门到落地】8、RestClient操作索引库-基础介绍及导入demo