前边我们已经学习了 Spring Boot 整合 Elasticsearch 的索引创建、文档查询,最后我们来学习文档更新以及删除的相关用法。
1、文档更新
根据文档 id 更新:
public void updateBookById(String id) {
Document document = Document.create();
document.put("commentCount", 1214666);
document.put("price", 66.6);
UpdateQuery updateQuery = UpdateQuery.builder(id).withDocument(document).build();
UpdateResponse response = elasticsearchRestTemplate.update(updateQuery, IndexCoordinates.of("book"));
System.out.println(response.getResult().name());
}
主要就是使用Document
设置要更新的字段,再通过UpdateQuery
绑定文档 id以及 Document。
如果需要根据多个文档 id 批量更新,可以使用bulkUpdate()
方法:
public void bulkUpdateBook(String... ids) {
List<UpdateQuery> updateQueryList = new ArrayList<>();
for (String id : ids) {
Document document = Document.create();
document.put("commentCount", 1214666);
document.put("price", 66.6);
UpdateQuery updateQuery = UpdateQuery.builder(id).withDocument(document).build();
updateQueryList.add(updateQuery);
}
elasticsearchRestTemplate.bulkUpdate(updateQueryList, IndexCoordinates.of("book"));
}
2、删除文档
根据文档 id 删除:
public void deleteBookById(String id) {
String result = elasticsearchRestTemplate.delete(id, Book.class);
System.out.println(result);
}
自定义删除条件,例如根据 skuId 删除:
public void deleteBookBySkuId(String skuId) {
NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.termQuery("skuId", skuId))
.build();
elasticsearchRestTemplate.delete(nativeSearchQuery, Book.class, IndexCoordinates.of("book"));
}
和查询一样,还是使用NativeSearchQueryBuilder
构建删除的条件。
更多的详细的内容可以参考官方文档。
本文详细的代码可以参考:https://github.com/SheHuan/LearnElasticsearch