Elasticsearch 整合 Spring Boot(4)

前边我们已经学习了 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 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

你可能感兴趣的:(Elasticsearch 整合 Spring Boot(4))