【Elasticsearch入门到落地】10、初始化RestClient

news2025/4/1 20:49:37

接上篇《9、hotel数据结构分析》
上一篇我们讲解了导入的宾馆数据库tb_hotel表结构的具体含义,并分析如何建立其索引库。本篇我们来正式进入链接Elasticsearch的Java代码的编写阶段,先进行RestClient的初始化。

RestClient的初始化分为三步,如下:

一、环境准备

1.引入依赖

首先需要在项目的pom.xml文件中添加Elasticsearch客户端依赖:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

由于SpringBoot默认集成的Elasticsearch版本可能与我们需要的不一致:

建议在<properties>中明确指定版本:

<properties>
    <java.version>1.8</java.version>
    <!-- 指定Elasticsearch版本为7.12.1 -->
    <elasticsearch.version>7.12.1</elasticsearch.version>
</properties>

二、初始化RestHighLevelClient

1.创建测试类

我们在src/test/java/cn/itcast/hotel下面新建一个测试文件HotelIndexTest.java:

然后我们在java类中,初始化RestHighLevelClient作为其成员变量:

package cn.itcast.hotel;

public class HotelIndexTest {
    private RestHighLevelClient client;
}

这个对象为什么放在成员变量的位置,因为将来在这个类中我们需要写很多很多的单元测试,如果我在每一个单元测试中都对这个对象进行初始化,就会很麻烦,定义成员变量后就可以复用。

2.初始化方法

定义完成员变量后,我们要对其进行初始化,我们定义一个setUp方法:

@BeforeEach
void setUp(){
   this.client = new RestHighLevelClient(RestClient.builder(
           HttpHost.create("http://192.168.2.129:9200") //如果有集群,可以设置多个
   ));
}

初始化的代码中,注解@BeforeEach表示在每个单元测试方法执行前运行,通过RestClient.builder()构建一个低级REST客户端,并传入ES节点的地址,然后使用低级客户端构造RestHighLevelClient对象,赋值给成员变量client。如果有集群,还可以设置多个HttpHost以提高容错性。

3.资源清理方法

然后我们还需要编写一个关闭客户端进行资源清理的代码:

@AfterEach
void tearDown() throws IOException{
    this.client.close();
}

注解@AfterEach,表示在每个单元测试方法执行后运行。调用client.close()关闭客户端连接,释放资源。注意这个我们方法声明了IOException,因为关闭连接可能引发I/O异常。

三、验证初始化结果

最后我们编写一个测试方法,来打印一下client,看看我们初始化是否成功:

@Test
void testInit(){
    System.out.println(client);
}

我们启动虚拟机中的docker服务,运行Elasticsearch的9200服务,然后在IDEA编辑器右键testInit()方法执行:

执行完毕后,如果显示绿色,证明我们client初始化成功:

四、常见问题排查

1. 连接失败问题

​●错误现象ConnectException或NoNodeAvailableException
​​●解决方案
(1)确认ES服务是否正常运行
(2)检查防火墙设置,确保9200端口可访问
(3)验证IP地址和端口配置是否正确

2. 版本不兼容问题

​​●错误现象UnsupportedOperationException或序列化错误
​​●解决方案
(1)确保客户端版本与ES服务版本一致
(2)检查elasticsearch.version是否被正确覆盖

3. 资源泄漏问题

​​●错误现象:测试运行后连接未释放
​​●解决方案:
(1)确保tearDown()方法被正确执行
(2)检查是否有未关闭的客户端实例

五、总结

本篇我们完成了RestHighLevelClient的初始化工作,关键要点包括:

1.正确配置Elasticsearch客户端依赖
2.使用@BeforeEach和@AfterEach管理客户端生命周期
3.验证客户端初始化结果
4.掌握常见问题的排查方法

通过规范的初始化流程,为后续的索引库操作奠定了坚实基础。下一篇我们将讲解如何使用RestClient创建索引库。

附:完整代码结构

src/test/java/cn/itcast/hotel/
└── HotelIndexTest.java
测试类完整代码:

package cn.itcast.hotel;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;

public class HotelIndexTest {
    private RestHighLevelClient client;

    @BeforeEach
    void setUp() {
        this.client = new RestHighLevelClient(
            RestClient.builder(
                HttpHost.create("http://192.168.2.129:9200")
            )
        );
    }

    @AfterEach
    void tearDown() throws IOException {
        this.client.close();
    }

    @Test
    void testInit() {
        System.out.println(client);
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2325355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI大模型系列】DeepSeek V3的混合专家模型机制-MoE架构(八)

一、什么是MoE架构 MoE架构的核心思想是将输入数据分配给不同的专家子模型&#xff0c;然后将所有子模型的输出进行合并&#xff0c;以生成最终结果。这种分配可以根据输入数据的特征进行动态调整&#xff0c;确保每个专家处理其最擅长的数据类型或任务方面&#xff0c;从而实…

HTML5贪吃蛇游戏开发经验分享

HTML5贪吃蛇游戏开发经验分享 这里写目录标题 HTML5贪吃蛇游戏开发经验分享项目介绍技术栈核心功能实现1. 游戏初始化2. 蛇的移动控制3. 碰撞检测4. 食物生成 开发心得项目收获后续优化方向结语 项目介绍 在这个项目中&#xff0c;我使用HTML5 Canvas和原生JavaScript实现了一…

QSettings用法实战(相机配置文件的写入和读取)

很多情况&#xff0c;在做项目开发的时候&#xff0c;将参数独立出来是比较好的方法 例如&#xff1a;相机的曝光次数、曝光时长等参数&#xff0c;独立成ini文件&#xff0c;用户可以在外面修改即可生效&#xff0c;无需在动代码重新编译等工作 QSettings便可以实现该功能 内…

机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法

一、集成学习框架 对训练样本较少的结构化数据领域&#xff0c;Boosting算法仍然是常用项 XGBoost、CatBoost和LightGBM都是以决策树为基础的集成学习框架 三个学习框架的发展是&#xff1a;XGBoost是在GBDT的基础上优化而来&#xff0c;CatBoost和LightGBM是在XGBoost的基础上…

[蓝桥杯 2023 省 A] 网络稳定性

题目来自DOTCPP&#xff1a; 思路&#xff1a; ①由于题目没有告诉我们成树形结构&#xff0c;可能成环。因此&#xff0c;我们要自己构建树。 ②本体我们通过kruskal重构树&#xff0c;按边权从大到小排序&#xff0c;那么查询的两个点的最近公共祖先权值就是答案。 ③在通…

鸿蒙项目源码-天气预报app-原创!原创!原创!

鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品…

一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证

一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证 如何创建钉钉应用实现H5端免登录创建钉钉内部应用1.进入钉钉开放平台&#xff0c;配置自己的应用信息2.配置应用相关信息&#xff08;建议选择旧版&#xff0c;后续有一个token获取&#xff0c;新版会提示URL不安全&…

测试开发-定制化测试数据生成(Python+jmeter+Faker)

实现步骤 步骤一&#xff1a;使用pythonfaker随机生成测试数据 在python中开发脚本&#xff0c;随机生成所需要的数据。import json from faker import Faker faker Faker(locale"zh_CN")def generate_faker_user():return {"name" : faker.name(),&qu…

智能体开发平台与大模型关系图谱

架构层级分解(以飞速灵燕智能体平台为例)动态交互流程 3. 关键连接点说明 4. 典型数据流示例

LinuxTCP/UDP基础概念

TCP&#xff08;传输控制协议&#xff09; TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。它的主要特点包括&#xff1a; 面向连接&#xff1a;在传输数据之前&#xff0c;需要通过“三次握手”建立连接&#xff1b;传输结束后&#xff0c;通过“四次挥手”断开…

【百日精通 JAVA | SQL篇 | 第一篇】初识数据库

一、数据库是什么&#xff1f; 数据库是一类软件&#xff0c;数据库的作用用于管理系统(这是一款成品软件&#xff0c;内部应用了很多数据结构)。 二、数据库分为两大类 1.关系型数据库 对于数据的要求比较严格 通常是以表格的方式来组织数据的。(和Excel差不多) 典型代表…

大数据Spark(五十六):Spark生态模块与运行模式

文章目录 Spark生态模块与运行模式 一、Spark生态模块 二、Spark运行模式 Spark生态模块与运行模式 一、Spark生态模块 Spark 生态模块包括&#xff1a;SparkCore、SparkSQL、SparkStreaming、StructuredStreaming、MLlib 和 GraphX。与 Hadoop 相关的整个技术生态如下所示…

Gossip协议:分布式系统中的“八卦”传播艺术

目录 一、 什么是Gossip协议&#xff1f;二、 Gossip协议的应用 &#x1f4a1;三、 Gossip协议消息传播模式详解 &#x1f4da;四、 Gossip协议的优缺点五、 总结&#xff1a; &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&…

Oracle初识:登录方法、导入dmp文件

目录 一、登录方法 以sys系统管理员的身份登录 &#xff0c;无需账户和密码 以账户密码的用户身份登录 二、导入dmp文件 方法一&#xff1a;PLSQL导入dmp文件 一、登录方法 Oracle的登录方法有两种。 以sys系统管理员的身份登录 &#xff0c;无需账户和密码 sqlplus / a…

微服务架构中的精妙设计:环境和工程搭建

一.前期准备 1.1开发环境安装 Oracle从JDK9开始每半年发布⼀个新版本, 新版本发布后, ⽼版本就不再进⾏维护. 但是会有⼏个⻓期维护的版本. ⽬前⻓期维护的版本有: JDK8, JDK11, JDK17, JDK21 在 JDK版本的选择上&#xff0c;尽量选择⻓期维护的版本. 为什么选择JDK17? S…

【Yolov8部署】 VS2019+opencv-dnn CPU环境下部署目标检测模型

文章目录 前言一、导出yolov8模型为onnx文件二、VS2019配置及opencv环境配置三、opencv部署总结 前言 本文主要研究场景为工业场景下&#xff0c;在工控机与工业相机环境中运行的视觉缺陷检测系统&#xff0c;因此本文主要目的为实现c环境下&#xff0c;将yolov8已训练好的检测…

3.30学习总结 Java包装类+高精度算法+查找算法

包装类&#xff1a; 基本数据类型对应的引用数据类型。 基本数据类型&#xff1a;在内存中记录的是真实的值。 八种包装类的父类都是Object类。 对象之间不能直接进行计算。 JDK5之后可以把int和integer看成一个东西&#xff0c;因为会进行内部优化。自动装箱和自动拆箱。 …

3月30号

// 1.toString 返回对象的字符串表示形式Object objnew Object();String str1obj.toString();System.out.println(str1);//java.lang.Objectb4c966a// 核心逻辑: // 当我们打印一个对象的时候,底层会调用对象的toString方法,把对象变成字符串 // 然…

Java——输入,循环,BigInteger,拷贝,排序

读取输入 打印输出到“ 标准输出流”&#xff08;即控制台窗口&#xff09;是一件非常容易的事情&#xff0c;只要 调用System.out.println 即可。然而&#xff0c;读取“ 标准输人流” System.in就没有那么简单了。要想通 过控制台进行输人&#xff0c;首先需要构造一个Scann…

Elasticsearch客户端工具初探--kibana

1 Kibana简介 Kibana是Elastic Stack&#xff08;ELK&#xff09;中的可视化工具&#xff0c;用于对Elasticsearch中存储的数据进行搜索、分析和可视化展示。它提供了直观的Web界面&#xff0c;支持日志分析、业务监控、数据探索等功能&#xff0c;广泛应用于运维监控、安全分析…