elasticsearch6-RestClient操作文档


个人名片:

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

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

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

目录

  • 五、RestClient操作文档
    • [1. 新增文档](#1. 新增文档)
    • [2. 查询文档](#2. 查询文档)
    • [3. 删除文档](#3. 删除文档)
    • [4. 修改文档](#4. 修改文档)
    • [5. 批量导入文档](#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
初始化:

java 复制代码
@SpringBootTest
public class HotelDocumentTest {
    @Autowired
    private IHotelService hotelService;

    @Autowired
    private RestHighLevelClient client;

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

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

1. 新增文档

java 复制代码
@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. 查询文档

java 复制代码
@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. 删除文档

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

4. 修改文档

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

5. 批量导入文档

java 复制代码
@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时需要)

相关推荐
ofoxcoding6 小时前
借助 CLAUDE.md 约束 Sonnet 5.5 多文件重构行为的提示词实践
大数据·elasticsearch·ai·重构
Elasticsearch6 小时前
隆重推出 AlertZero:让你的告警队列实现 “收件箱清零” 式管理
elasticsearch
ly76897 小时前
从 TF-IDF 到 BM25:Elasticsearch 相关性评分的字段长度归一化与 boost 调参边界
java·elasticsearch·query dsl·bm25·相关性评分
SL-staff7 小时前
技术实践:将Excel自动升级为可搜索的知识节点(JVS平台实现)
mongodb·elasticsearch·知识图谱·jvs平台·语义解析·企业文档管理·excel结构化
Elasticsearch7 小时前
2026 年唯一获得端点预防与响应(EPR)满分的厂商是 Elastic
elasticsearch
vx_Biye_Design7 小时前
springboot旅游管理系统18006-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·django·课程设计
ly768917 小时前
倒排索引与 FST 在 Lucene 中的内存布局:segment、docValues 与词典压缩的工程取舍
elasticsearch·lucene·倒排索引·doc values·fst
Elasticsearch18 小时前
利用预计算上下文,更快速、更低成本地开展支持问题调查
elasticsearch
小小小米粒21 小时前
重置本地git
大数据·git·elasticsearch
ly76891 天前
Spring Boot 集成 Elasticsearch 的生产实践:客户端选型、索引生命周期与批量写入容错
spring boot·elasticsearch·索引生命周期·java api client·批量写入