elasticsearch6-RestClient操作文档

news/2024/11/20 7:14:43/

请添加图片描述
个人名片:

博主:酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

目录

  • 五、RestClient操作文档
    • 1. 新增文档
    • 2. 查询文档
    • 3. 删除文档
    • 4. 修改文档
    • 5. 批量导入文档

五、RestClient操作文档

Elasticsearch中的RestClient是一种非Java API,用于与Elasticsearch集群进行交互。RestClient提供了一种简单、直观的方式来操作和管理Elasticsearch中的文档。
RestClient使用HTTP协议来与Elasticsearch集群进行通信。它支持多种请求类型,例如GET、POST、PUT、DELETE等,并且可以发送请求到指定的索引、类型和ID。RestClient是Elasticsearch官方推荐的API之一,它具有以下优点:

  • 简单易用 RestClient API的设计非常简洁,易于学习和使用。通过简单的HTTP请求,开发人员可以轻松地创建、查询、更新和删除Elasticsearch中的文档。

  • 全面的功能支持 RestClient支持Elasticsearch中的大部分功能,包括全文搜索、结构化搜索、聚合查询等。它还提供了监控和管理Elasticsearch集群的功能,可以帮助开发人员了解集群的状态和运行情况,并及时发现和解决问题。

  • 跨平台支持 RestClient是基于HTTP协议的API,它可以在任何支持HTTP协议的平台上使用。无论是Java、Python、Ruby还是其他编程语言,都可以使用RestClient
    API与Elasticsearch集群进行交互。

  • 灵活的定制 RestClient API是Elasticsearch中的非侵入式API,它可以在不修改原有代码的情况下,轻松地对Elasticsearch进行定制和扩展。

RestClient操作文档的作用主要有以下几点:

  • 文档的CRUD操作 RestClient可以用于创建、读取、更新和删除Elasticsearch中的文档。这些操作可以通过简单的HTTP请求实现,开发人员只需要提供文档的JSON表示形式和相应的请求方法即可。

  • 结构化搜索 RestClient提供了结构化搜索的功能,可以帮助开发人员根据指定的字段进行搜索和过滤操作。这些操作可以通过简单的查询字符串或JSON格式的查询请求实现。

  • 全文搜索 RestClient提供了全文搜索的功能,可以帮助开发人员根据文本内容进行搜索和匹配操作。这些操作可以通过简单的查询字符串或JSON格式的查询请求实现。

  • 聚合查询 RestClient提供了聚合查询的功能,可以帮助开发人员对大量数据进行分组、汇总和统计。这些操作可以通过简单的查询字符串或JSON格式的查询请求实现。

  • 数据分析和监控 RestClient提供了数据分析和监控的功能,可以帮助开发人员了解Elasticsearch集群的状态和运行情况,并及时发现和解决问题。这些操作可以通过监控API实现。

案例:利用JavaRestClient实现文档的CRUD
初始化:

@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;@Autowiredprivate RestHighLevelClient client;@BeforeEachvoid setup() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.179.128:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

1. 新增文档

@Test
void testIndexDocument() throws IOException {Hotel hotel = hotelService.getById(36934L);HotelDoc hotelDoc = new HotelDoc(hotel);IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);client.index(request, RequestOptions.DEFAULT);
}

2. 查询文档

@Test
void testGetDocumentById() throws IOException {GetRequest request = new GetRequest("hotel", "36934");GetResponse response = client.get(request, RequestOptions.DEFAULT);String json = response.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc);
}

3. 删除文档

@Test
void testDeleteDocument() throws IOException {DeleteRequest request = new DeleteRequest("hotel", "36934");client.delete(request, RequestOptions.DEFAULT);
}

4. 修改文档

  1. 全量修改 = 插入数据
  2. 增量修改 存在修改该字段,不存在则自动添加字段
@Test
void testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("hotel", "36934");request.doc("price", "954","startName", "四钻");client.update(request, RequestOptions.DEFAULT);}

5. 批量导入文档

@Test
void testBulk() throws IOException {List<Hotel> list = hotelService.list();BulkRequest request = new BulkRequest();for (Hotel hotel : list) {HotelDoc hotelDoc = new HotelDoc(hotel);request.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc), XContentType.JSON));}client.bulk(request, RequestOptions.DEFAULT);
}

小结:

文档操作的基本步骤:
初始化RestHighLevelClient
创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk
准备参数(Index、Update、Bulk时需要)
发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete、bulk
解析结果(Get时需要)


http://www.ppmy.cn/news/1112822.html

相关文章

数组相关面试题

1、原地移除数组中所有的元素val&#xff0c;要求时间复杂度为O(N),空间复杂度为O(1)。 OJ链接&#xff1a;27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a; 法1&#xff1a;挪到数据&#xff0c;思路如顺序表的头删&#xff0c;将后面的数据向前挪动将…

Windows【工具 04】WinSW官网使用说明及实例分享(将exe和jar注册成服务)实现服务器重启后的服务自动重启

官方Github&#xff1b;官方下载地址。没有Git加速的话很难下载&#xff0c;分享一下发布日期为2023.01.29的当前最新稳定版v2.12.0网盘连接。 包含文件&#xff1a; WinSW-x64.exesample-minimal.xmlsample-allOptions.xml 链接&#xff1a;https://pan.baidu.com/s/1sN3hL5H…

机器学习第六课--朴素贝叶斯

朴素贝叶斯广泛地应用在文本分类任务中&#xff0c;其中最为经典的场景为垃圾文本分类(如垃圾邮件分类:给定一个邮件&#xff0c;把它自动分类为垃圾或者正常邮件)。这个任务本身是属于文本分析任务&#xff0c;因为对应的数据均为文本类型&#xff0c;所以对于此类任务我们首先…

十天学完基础数据结构-第一天(绪论)

1. 数据结构的研究内容 数据结构的研究主要包括以下核心内容和目标&#xff1a; 存储和组织数据&#xff1a;数据结构研究如何高效地存储和组织数据&#xff0c;以便于访问和操作。这包括了在内存或磁盘上的数据存储方式&#xff0c;如何将数据元素组织成有序或无序的集合&…

[NLP] LLM---<训练中文LLama2(三)>对LLama2进行中文预料预训练

预训练 预训练部分可以为两个阶段&#xff1a; 第一阶段&#xff1a;冻结transformer参数&#xff0c;仅训练embedding&#xff0c;在尽量不干扰原模型的情况下适配新增的中文词向量。第二阶段&#xff1a;使用 LoRA 技术&#xff0c;为模型添加LoRA权重&#xff08;adapter&…

Android 格式化存储之Formatter

格式化存储相关的数值时&#xff0c;可以用 android.text.format.Formatter 。 Formatter.formatFileSize(Context context, long sizeBytes) 源码说明&#xff0c;在 Android O 后&#xff0c;存储单位的进制是 1000 &#xff0c;Android N 之前单位进制是 1024 。 /*** Fo…

java 字符串只保留数字、字母、中文

public static void main(String[] args) {String str "测 试 WG23-D";// 只留字母String s1 str.replaceAll("[^a-zA-Z]", "");// 只留数字String s2 str.replaceAll("[^0-9]", "");// 只留中文String s3 str.replaceA…

ES6-解构赋值

可以将值从数组或属性从对象提取道不同的变量中。 交换变量 let a 1 let b 2 [ a, b ] [ b, a ]//a2,b1 数组 const arr [1,2,3,4]; let [a,b,c,d] arr;//a1,b2,c3,d4 let [foo] []; let [bar, foo] [1];//bar1,fooundefined 防止从数组中取出一个值为undefined的对…