当前位置: 首页 > news >正文

【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依赖:

<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代码:

下载链接: 
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)就定义在这里。

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

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

相关文章:

  • 【OpenCV】入门教学
  • Spring 和 Spring MVC 的关系是什么?
  • python知识和项目经验
  • 案例-06.部门管理-根据ID查询
  • Python基于Flask的豆瓣电影数据分析可视化系统(附源码,文档说明)
  • 国产编辑器EverEdit - “切换文件类型”的使用场景
  • 力扣 470. 用 Rand7() 实现 Rand10() 拒绝采样 等概率随机数生成
  • 2.【BUUCTF】[极客大挑战 2020]Roamphp1-Welcome
  • 网易雷火游戏测试开发1面面经(带脑图)
  • 权限五张表
  • React入门 - 0.React简介
  • snort3.0-ubuntu18.04 64入侵检测安装与使用
  • 总结前端常用数据结构 之 数组篇【JavaScript -包含常用数组方法】
  • MYSQL下载安装及使用
  • 四、敏捷方法论:敏捷开发中的关键实践
  • 【第12章:深度学习与伦理、隐私—12.3 深度学习模型的透明性与可解释性提升策略】
  • NumPy中生成和堆叠数组、生成切片的特殊对象:np.r_ np.c_ np.s_
  • RK3588视觉控制器与AI 算法:开启工业视觉检测新境界
  • 数据结构实现顺序表的尾插,尾删,按值查找/修改/删除,按下标查找/增加/删除
  • python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注
  • 华侨城A:一季度营收53.63亿元,净利润亏损14.19亿元
  • 第一集丨《无尽的尽头》值得关注,《榜上佳婿》平平无奇
  • 从世界工厂走向全球创新中心,上海车展为何成为全球汽车行业风向标?
  • 全球首台环形CT直线加速器在沪正式开机,系我国自主研发
  • 一季度煤价持续下探,多家煤炭巨头营收下滑、净利润降约两成
  • 航天科技集团质量技术部部长严泽想升任集团副总经理