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 的基础,理解它们对于后续的数据检索和分析开发至关重要。