【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

相关推荐
Elastic 中国社区官方博客3 小时前
Elasticsearch 混合搜索 - Hybrid Search
大数据·人工智能·elasticsearch·搜索引擎·ai·语言模型·全文检索
KimiKudo3 小时前
记录一个ES分词器不生效的解决过程
elasticsearch
{⌐■_■}3 小时前
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
大数据·git·elasticsearch·golang·iphone·ip·etcd
risc1234563 小时前
【Elasticsearch】为一个字段配置多个分析器
elasticsearch
risc1234563 小时前
【Elasticsearch】如何获取一致的评分
elasticsearch
三月七(爱看动漫的程序员)9 小时前
与本地电脑PDF文档对话的PDF问答程序
前端·人工智能·chrome·gpt·搜索引擎·pdf·知识图谱
阿华的代码王国11 小时前
【从0做项目】Java搜索引擎(6)& 正则表达式鲨疯了&优化正文解析
java·后端·搜索引擎·正则表达式·java项目·从0到1做项目
{⌐■_■}19 小时前
【git】提交修改、回撤、回滚、Tag 操作讲解,与reset (--soft、--mixed、--hard) 的区别
大数据·git·elasticsearch
screamn21 小时前
ElasticSearch详解
大数据·elasticsearch·jenkins
不是乖小孩21 小时前
elasticsearch在windows上的配置
大数据·elasticsearch·jenkins