阅读量:0
文章目录
在现代应用中,Elasticsearch 已成为处理海量数据和实现高效搜索的利器。今天,我们将探讨如何在 Spring Boot 项目中使用 Elasticsearch 进行商品文档的增删改查操作。通过这篇文章,你将了解到如何配置 Elasticsearch 客户端以及具体的实现步骤。
前期准备
在开始之前,我们需要确保已经在项目中引入了必要的依赖,并且已经安装并运行了 Elasticsearch 服务。本文假设你已经完成了这些准备工作。
配置 Elasticsearch 客户端
首先,我们需要配置 Elasticsearch 客户端。在每个测试方法执行之前,我们会初始化 RestHighLevelClient
,并在测试结束后关闭它,以确保资源的正确释放。以下是 setUp
和 tearDown
方法的实现:
@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 进行商品文档的增删改查操作。