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

文章目录

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

前期准备

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

配置 Elasticsearch 客户端

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

java 复制代码
@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 文档格式并进行存储。以下是具体实现步骤:

java 复制代码
@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 来查询文档。以下是查询文档的示例代码:

java 复制代码
@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 来实现。以下是更新文档的示例代码:

java 复制代码
@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 来实现。以下是删除文档的示例代码:

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

批量操作

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

java 复制代码
@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 进行商品文档的增删改查操作。

相关推荐
摇滚侠3 小时前
Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
spring boot·笔记·后端
wb043072014 小时前
性能优化实战:基于方法执行监控与AI调用链分析
java·人工智能·spring boot·语言模型·性能优化
Chen-Edward7 小时前
有了Spring为什么还有要Spring Boot?
java·spring boot·spring
jianghx10247 小时前
Docker部署ES,开启安全认证并且设置账号密码(已运行中)
安全·elasticsearch·docker·es账号密码设置
magic334165637 小时前
Springboot整合MinIO文件服务(windows版本)
windows·spring boot·后端·minio·文件对象存储
小学鸡!8 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
番茄Salad9 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
摇滚侠12 小时前
Spring Boot 3零基础教程,WEB 开发 自定义静态资源目录 笔记31
spring boot·笔记·后端·spring
摇滚侠12 小时前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 遍历 笔记40
spring boot·笔记·thymeleaf
半梦半醒*13 小时前
搭建Jenkins
linux·运维·centos·tomcat·jenkins·运维开发