当前位置: 首页 > news >正文

使用 Java RestClient 与 Elasticsearch 进行商品文档操作

文章目录

    • 前期准备
    • 配置 Elasticsearch 客户端
    • 添加文档
    • 查询文档
    • 更新文档
    • 删除文档
    • 批量操作
    • 结语

在现代应用中,Elasticsearch 已成为处理海量数据和实现高效搜索的利器。今天,我们将探讨如何在 Spring Boot 项目中使用 Elasticsearch 进行商品文档的增删改查操作。通过这篇文章,你将了解到如何配置 Elasticsearch 客户端以及具体的实现步骤。

前期准备

在开始之前,我们需要确保已经在项目中引入了必要的依赖,并且已经安装并运行了 Elasticsearch 服务。本文假设你已经完成了这些准备工作。

配置 Elasticsearch 客户端

首先,我们需要配置 Elasticsearch 客户端。在每个测试方法执行之前,我们会初始化 RestHighLevelClient,并在测试结束后关闭它,以确保资源的正确释放。以下是 setUptearDown 方法的实现:

@BeforeEach
void setUp() {client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.xxx.xxx:9200")));
}@AfterEach
void tearDown() throws IOException {if (client != null) {client.close();}
}

添加文档

接下来,我们来看如何将商品文档添加到 Elasticsearch 中。首先,我们需要从数据库中获取商品数据,然后将其转换为 Elasticsearch 文档格式并进行存储。以下是具体实现步骤:

@Test
void testIndexDoc() throws IOException {// 0.准备文档数据// 0.1.根据id查询数据库数据Item item = itemService.getById(317578L);// 0.2.把数据库数据转为文档数据ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);itemDoc.setPrice(29900);// 1.准备Request对象IndexRequest request = new IndexRequest("items").id(itemDoc.getId());// 2.准备请求参数request.source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON);// 3.发送请求IndexResponse response = client.index(request, RequestOptions.DEFAULT);System.out.println("response=" + response);
}

在上述代码中,我们通过 itemService 获取商品数据,并使用 BeanUtil 工具将其转换为 ItemDoc 对象,最后将该对象作为 JSON 字符串存储到 Elasticsearch 中。

查询文档

为了验证文档是否成功存储,我们可以通过文档 ID 来查询文档。以下是查询文档的示例代码:

@Test
void testGetDoc() throws IOException {// 1.准备Request对象GetRequest request = new GetRequest("items", "317578");// 2.发送请求GetResponse response = client.get(request, RequestOptions.DEFAULT);// 3.解析响应String json = response.getSourceAsString();ItemDoc itemDoc = JSONUtil.toBean(json, ItemDoc.class);System.out.println("doc=" + itemDoc);
}

更新文档

如果需要更新文档中的某些字段,我们可以使用 UpdateRequest 来实现。以下是更新文档的示例代码:

@Test
void testUpdateDoc() throws IOException {// 1.准备Request对象UpdateRequest request = new UpdateRequest("items", "317578");// 2.准备请求参数request.doc("price", 25600);// 3.发送请求client.update(request, RequestOptions.DEFAULT);
}

删除文档

最后,如果需要删除文档,可以使用 DeleteRequest 来实现。以下是删除文档的示例代码:

@Test
void testDeleteDoc() throws IOException {// 1.准备Request对象DeleteRequest request = new DeleteRequest("items", "317578");// 2.发送请求client.delete(request, RequestOptions.DEFAULT);
}

批量操作

在实际应用中,我们可能需要批量处理文档。以下是批量添加文档的示例代码:

@Test
void testBulkDoc() throws IOException {int pageNo = 1, pageSize = 500;while (true) {// 1.准备文档数据Page<Item> page = itemService.lambdaQuery().eq(Item::getStatus, 1).page(Page.of(pageNo, pageSize));List<Item> records = page.getRecords();if (records == null || records.isEmpty()) {return;}// 2.准备Request对象BulkRequest request = new BulkRequest();// 3.准备请求参数for (Item item : records) {request.add(new IndexRequest("items").id(item.getId().toString()).source(JSONUtil.toJsonStr(BeanUtil.copyProperties(item, ItemDoc.class)), XContentType.JSON));}// 4.发送请求client.bulk(request, RequestOptions.DEFAULT);// 5.翻页pageNo++;}
}

在这段代码中,我们使用分页查询数据库中的商品数据,并将其批量添加到 Elasticsearch 中。

结语

通过这篇文章,我们详细介绍了如何在 Spring Boot 项目中使用 Elasticsearch 进行商品文档的增删改查操作。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 进阶SpringBoot之 Thymeleaf 模板引擎
  • MySQL:复杂查询(一)——聚合函数分组查询联合查询01
  • C#实现动画效果
  • 基于STM32开发的智能温室控制系统
  • VisionPro二次开发学习笔记10-使用 PMAlign和Fixture固定Blob工具检测孔
  • MySQL运维-主从复制
  • 【学习笔记】Day 9
  • Qt动态调用 - QMetaObject::invokeMethod
  • Linux学习笔记:Linux基础知识汇总(kill 进程-vi编辑检索-查看当前文件夹的大小-修复硬盘等)
  • RCE之无参数读取文件总结
  • 使用 HAProxy + Nginx 搭建 Web 群集(二)
  • CF964(div4)补题G1G2
  • pod探针和状态
  • 字节跳动发Seed-TTS语音合成模型,可模仿任意人的声音,效果逼真
  • (回溯) LeetCode 78. 子集
  • 【EOS】Cleos基础
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CEF与代理
  • CentOS 7 防火墙操作
  • Docker: 容器互访的三种方式
  • Elasticsearch 参考指南(升级前重新索引)
  • FastReport在线报表设计器工作原理
  • Go 语言编译器的 //go: 详解
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Leetcode 27 Remove Element
  • Linux下的乱码问题
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • mysql innodb 索引使用指南
  • MySQL-事务管理(基础)
  • orm2 中文文档 3.1 模型属性
  • Sass Day-01
  • SOFAMosn配置模型
  • yii2权限控制rbac之rule详细讲解
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 工程优化暨babel升级小记
  • 好的网址,关于.net 4.0 ,vs 2010
  • ------- 计算机网络基础
  • 解析带emoji和链接的聊天系统消息
  • 如何使用 JavaScript 解析 URL
  • 如何用vue打造一个移动端音乐播放器
  • 微信小程序设置上一页数据
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 第二十章:异步和文件I/O.(二十三)
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #图像处理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (function(){})()的分步解析
  • (Java入门)抽象类,接口,内部类
  • (独孤九剑)--文件系统
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047