RestClient操作Elasticsearch

ops/2025/1/8 13:34:28/

简介

Elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

ESTCLIENT.html" title=RestClient>RestClient_3">ESTCLIENT.html" title=RestClient>RestClient

ES官方提供的用Java语言来操作ES的客户端

前置条件

使用前需引入ESTCLIENT.html" title=RestClient>RestClient依赖,下面以7.12.1版本为例

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

注意版本需要和安装的ES版本保持一致

基本操作

操作索引库

java">import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.ESTCLIENT.html" title=RestClient>RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CloseIndexRequest;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;public class HotelIndexTest {// 用于与Elasticsearch进行高级别RESTful API交互的客户端对象private RestHighLevelClient client;/*** 测试方法:用于创建酒店索引(hotel index)。* 步骤如下:* 1. 创建一个CreateIndexRequest对象,指定要创建的索引名称为"hotel"。* 2. 准备请求的参数,将预定义的映射模板(MAPPING_TEMPLATE,应该是符合Elasticsearch索引映射格式的JSON字符串)设置到请求中,指定内容类型为JSON格式。* 3. 使用客户端对象发送创建索引的请求到Elasticsearch服务器。* @throws IOException 如果在请求发送过程中出现I/O异常则抛出该异常,比如网络连接问题、读写错误等。*/@Testvoid createHotelIndex() throws IOException {// 1.创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");// 2.准备请求的参数request.source(MAPPING_TEMPLATE, XContentType.JSON);// 3.发送请求client.indices().create(request, RequestOptions.DEFAULT);}/*** 测试方法:用于删除酒店索引(hotel index)。* 步骤如下:* 1. 创建一个DeleteIndexRequest对象,指定要删除的索引名称为"hotel"。* 3. 使用客户端对象发送删除索引的请求到Elasticsearch服务器。* @throws IOException 如果在请求发送过程中出现I/O异常则抛出该异常,比如网络连接问题、读写错误等。*/@Testvoid testDeleteHotelIndex() throws IOException {// 1.创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("hotel");// 3.发送请求client.indices().delete(request, RequestOptions.DEFAULT);}/*** 测试方法:用于检查酒店索引(hotel index)是否存在。* 步骤如下:* 1. 创建一个GetIndexRequest对象,指定要检查的索引名称为"hotel"。* 3. 使用客户端对象发送检查索引是否存在的请求到Elasticsearch服务器,获取返回的布尔值结果(表示是否存在),然后根据结果输出相应的提示信息。* @throws IOException 如果在请求发送过程中出现I/O异常则抛出该异常,比如网络连接问题、读写错误等。*/@Testvoid testExistHotelIndex() throws IOException {// 1.创建Request对象GetIndexRequest request = new GetIndexRequest("hotel");// 3.发送请求boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.err.println(exists? "索引库已经存在!" : "索引库不存在!");}/*** 在每个测试方法执行之前会被调用的方法,用于初始化操作。* 在这里创建了一个RestHighLevelClient对象,该对象用于与Elasticsearch服务器进行通信。* 通过指定Elasticsearch服务器的地址(这里是"http://192.168.71.128:9200")来构建客户端连接。*/@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(ESTCLIENT.html" title=RestClient>RestClient.builder(HttpHost.create("http://192.168.71.128:9200")));}/*** 在每个测试方法执行之后会被调用的方法,用于清理资源等操作。* 在这里关闭了之前创建的RestHighLevelClient对象,释放与Elasticsearch服务器的连接资源。* @throws IOException 如果在关闭客户端连接过程中出现I/O异常则抛出该异常,比如网络连接关闭错误等。*/@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

操作文档

java">import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.ESTCLIENT.html" title=RestClient>RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;@SpringBootTest
public class HotelDocumentTest {private RestHighLevelClient client;@Autowiredprivate IHotelService hotelService;/*** 添加文档(对应mysql数据库中表格的一行记录)* 把数据库表中的一行记录数据存到ES的索引库中* @throws IOException*/@Testvoid testAddDocument() throws IOException {Hotel hotel = hotelService.getById(61083L);// 转换为文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1.准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2.准备Json文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//3.发送请求client.index(request,RequestOptions.DEFAULT);}/*** 根据文档id获取文档* @throws IOException*/@Testvoid testGetDocumentById() throws IOException {//准备request对象GetRequest request = new GetRequest("hotel","61083");GetResponse response = client.get(request, RequestOptions.DEFAULT);String json = response.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc);}/*** 更新文档,对字段进行增删改查* @throws IOException*/@Testvoid testUpdateDocumentById() throws IOException {UpdateRequest request = new UpdateRequest("hotel", "61083");request.doc("price","999","starName","四钻","dd","123");UpdateResponse update = client.update(request, RequestOptions.DEFAULT);}/*** 删除文档* @throws IOException*/@Testvoid testDeleteDocumentById() throws IOException {DeleteRequest request = new DeleteRequest("hotel", "61083");client.delete(request, RequestOptions.DEFAULT);}@BeforeEachvoid setUp(){this.client = new RestHighLevelClient(ESTCLIENT.html" title=RestClient>RestClient.builder(HttpHost.create("http://192.168.71.128:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

http://www.ppmy.cn/ops/147801.html

相关文章

一、Git与GitHub基础说明

Git与GitHub Git与GitHub一、Git1定义2核心功能(1) 版本控制(2) 分支管理(3) 合并操作 二、GitHub1定义2核心功能(1)远程仓库托管(2)Pull Requests&#xff08;拉取请求&#xff09;(3) Issue Tracking&#xff08;问题跟踪&#xff09;(4) 团队管理(5) 社交功能(6)个人资料和贡…

爬虫代码中如何添加异常处理?

在编写爬虫代码时&#xff0c;添加异常处理是非常重要的一步&#xff0c;因为它可以帮助我们处理网络请求中可能出现的各种问题&#xff0c;比如网络连接错误、超时、解析错误等。以下是如何在Python爬虫代码中添加异常处理的示例&#xff1a; import requests from bs4 impor…

如何限制软件访问文件范围,阻止越权访问

常用的服务器软件几乎都存在安全漏洞&#xff08;如&#xff1a;MySQL、Apache、Serv-U、SQL Server、Nginx、Tomcat等等&#xff09;。并且这些软件基本都以最高管理员权限运行&#xff0c;一旦暴出漏洞&#xff0c;具有非常高的危险性&#xff0c;不法分子可以窃取数据或植入…

依赖冲突`npm install --no-audit --save @testing-library/jest-dom@^5.14.1...` failed

使用react脚手架Create React App创建react应用 使用npm init react-app my-app&#xff0c;过程中报错 安装依赖时&#xff0c;React版本与模版预设版本不一致&#xff0c;根据提示修改依赖版本&#xff0c;改为19.0.0 npm install --no-audit --save testing-library/jest-…

记录一次遭遇黑客扫描服务器经过

背景 服务器告警&#xff0c;cpu每隔一段时间就出现瞬间飙升100%&#xff0c;监听队列随之溢出。 看监控&#xff0c;基本都是tcp连接过多的问题&#xff0c;针型的qps&#xff0c;一直以为是网站文章数太多从而蜘蛛爬虫访问瞬间飙升&#xff0c;期间处理过队列&#xff0c;最…

数字化转型 -企业数字化转型实施指南

文章目录 前言一、 背景二、 数字化转型实施1.1 指定转型规划1.2 组织落地实施1.3 开展成效评估1.4 推进迭代优化 三、 数字化转型典型场景1.1 强化研发设计云端协同1.2 推动生产过程智能转型1.3 加速运维服务模式创新1.4 促进经营管理流程优化1.5 提升供应链弹性和韧性1.6 探索…

已知n找最小正整数x使n*x为一个平方数

已知正整数n&#xff0c;求最小的正整数x&#xff0c;使得n*x是一个平方数。例如n12&#xff0c;则最小的x是3&#xff0c;n*x为36是一个平方数。 输入 仅一个正整数n&#xff0c;n < 231 输出 输出最小的正整数x。 样例输入 Copy 4样例输出 Copy 1 #include <std…

Web 开发入门:从前端到后端的全栈开发探索

Web 开发是指创建和维护通过网络浏览器访问的应用程序。Web 开发涉及到的领域非常广泛&#xff0c;涵盖了前端、后端、数据库等多个技术栈。在这篇文章中&#xff0c;我们将详细介绍 Web 开发的基本概念、前端和后端的技术、全栈开发的特点以及如何开始从事 Web 开发。 1. Web…