【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的所有版本。

官方文档: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

相关推荐
失散131 天前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
铭毅天下1 天前
Elasticsearch 到 Easysearch 数据迁移 5 种方案选型实战总结
大数据·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客1 天前
Elasticsearch 推理 API 增加了开放的可定制服务
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
李白你好1 天前
一键式搜索引擎Hacking工具
搜索引擎
yumgpkpm1 天前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
Elastic 中国社区官方博客1 天前
AI Agent 评估:Elastic 如何测试代理框架
大数据·人工智能·elasticsearch·搜索引擎
Elasticsearch2 天前
在 Elasticsearch 中解析 JSON 字段
elasticsearch
望获linux2 天前
【实时Linux实战系列】使用 u-trace 或 a-trace 进行用户态应用剖析
java·linux·前端·网络·数据库·elasticsearch·操作系统
dessler2 天前
Elasticsearch(ES)-Logstash
linux·运维·elasticsearch
云中隐龙2 天前
mac使用本地jdk启动elasticsearch解决elasticsearch启动时jdk损坏问题
java·elasticsearch·macos