Elasticsearch 文档操作:Spring Boot 集成实践

news/2024/9/23 4:39:04/

Elasticsearch(简称 ES)是一个强大的搜索引擎,它提供了丰富的文档操作功能,包括索引、查询、更新和删除等。这些操作是 ES 的核心功能,对于实现高效的数据检索和分析至关重要。本文将通过一个 Spring Boot 应用中的示例,详细介绍如何在 ES 中执行文档的基本操作。

环境搭建

在开始之前,请确保你已经在你的 Spring Boot 项目中集成了 Elasticsearch 的 Java 高级 REST 客户端。如果还未集成,请参考相关文档或之前的博客文章。

https://gitee.com/yjtzfywh/es-demo.git

Elasticsearch 文档操作

文档在 ES 中是数据的基本单位,类似于关系数据库中的行。以下是一些基本的文档操作。

添加文档

添加文档是将数据写入 ES 的过程。每个文档都有一个与之关联的唯一标识符(ID)。

@Test
void testAddDocument() throws IOException {Hotel hotel = hotelMapper.selectById(1973839294L);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);
}

在这个示例中,我们首先从数据库中查询 Hotel 实体,然后将其转换为 HotelDoc 对象,并使用 IndexRequest 将其索引到 ES 中。

获取文档

获取文档是从一个索引中检索特定文档的过程。

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

在这个示例中,我们使用 GetRequest 来获取指定 ID 的文档,并将其源数据解析为 HotelDoc 对象。

更新文档

更新文档是修改已存在文档的过程。ES 允许我们更新文档中的部分字段。

@Test
void testUpdateDocument() throws IOException {UpdateRequest request = new UpdateRequest("hotel", "1973839294");request.doc("price", 300, "starName", "四钻");client.update(request, RequestOptions.DEFAULT);
}

在这个示例中,我们使用 UpdateRequest 来更新指定 ID 的文档,增加了价格和星级名称字段。

删除文档

删除文档是从索引中移除文档的过程。

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

在这个示例中,我们使用 DeleteRequest 来删除指定 ID 的文档。

批量处理文档

批量处理文档可以提高索引操作的效率,特别是当你需要索引大量文档时。

@Test
void testBulkRequest() throws IOException {List<Hotel> hotelList = hotelMapper.selectList(null);BulkRequest request = new BulkRequest();for (Hotel hotel : hotelList) {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);
}

在这个示例中,我们使用 BulkRequest 来批量索引所有酒店数据。

结论

通过本文,我们学习了如何在 Spring Boot 应用中对 Elasticsearch 执行文档的基本操作。这些操作是使用 ES 的基础,理解它们对于后续的数据检索和分析开发至关重要。


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

相关文章

【C#】中IndexOf的用法

在 C# 中&#xff0c;IndexOf 方法是字符串和列表&#xff08;如 List<T>&#xff09;等数据结构中常用的方法&#xff0c;用于查找指定元素或子串首次出现的位置。以下是针对不同情况使用 IndexOf 的示例。 对于字符串 对于字符串类型&#xff0c;IndexOf 方法返回子字…

超详细!!!electron-vite-vue开发桌面应用之开启调试工具(二)

云风网 云风笔记 云风知识库 上篇已经初步搭建完项目&#xff0c;这次配置比较重要的一部分&#xff0c;那就是开启调试工具&#xff0c;这是开发项目比较重要且基础的部分 vite.config.ts配置更新 main: {// Shortcut of build.lib.entry.entry: electron/main.ts,onstart(ar…

unity自动添加头部注释脚本

unity自动添加头部注释脚本&#xff0c;放在Assets目录自动生效 public class ScriptCreateInit : UnityEditor.AssetModificationProcessor {private static void OnWillCreateAsset(string path){path path.Replace(".meta", "");if (path.EndsWith(&qu…

每天一个数据分析题(四百七十一)- 假设检验

下列对假设检验的描述合理的是? A. 备择假设是研究者想收集证据予以支持的假设 B. 原假设是研究者想收集证据予以推翻的假设 C. 原假设是研究者想收集证据予以支持的假设 D. 备择假设是研究者想收集证据予以推翻的假设 数据分析认证考试介绍&#xff1a;点击进入 题目来…

理解 Go 语言的分组操作

共享资源保护、任务编排和消息传递是 Go 并发编程中常见的场景,而分组执行一批相同的或类似的任务则是任务编排中的一类情形。下面我们专门介绍分组编排的一些常用场景和同步原语,主要用来处理一组任务。我们先来介绍一个非常常用的同步原语,即 ErrGroup。 1. ErrGroup ErrG…

c++精品小游戏(无错畅玩版)

一、俄罗斯方块 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h>#ifdef _MSC_VER // M$的编译器要给予特殊照顾 #if _MSC_VER < 1200 // VC6及以下版本 #err…

企业数据接口:失信被执行人(人员)查询

根据搜索关键字、名称等参数&#xff0c;获取失信被执行人相关信息 批量获取企业多维度信息

CCF-GESP8级考试—图论算法及综合应用(最小生成树)

&#x1f349;1 最小生成树的概念 1.1 连通图 &#x1f388; 连通图是图论中的一个重要概念&#xff0c;用于描述图中顶点之间是否存在路径相连。一个无向图中&#xff0c;如果从图中的任意一个顶点出发&#xff0c;都可以通过边的连接到达图中的任意其他顶点&#xff0c;则该…