使用 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 进行商品文档的增删改查操作。

相关推荐
2401_8574396935 分钟前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧66636 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
哎呦没4 小时前
SpringBoot框架下的资产管理自动化
java·spring boot·后端
2401_857600954 小时前
SpringBoot框架的企业资产管理自动化
spring boot·后端·自动化
NiNg_1_2348 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
种树人202408198 小时前
如何在 Spring Boot 中启用定时任务
spring boot
苹果醋311 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
Wx-bishekaifayuan11 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer0811 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml412 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理