es更新数据

  1. 需求一:批量更新一些文档,不需要知道哪些文档被更新。
     
    List<UpdateQuery> updateRequestList = ...; // 构造更新请求列表
    BulkOptions bulkOptions = BulkOptions.builder().withRefreshPolicy(RefreshPolicy.IMMEDIATE).build();
    elasticsearchRestTemplate.bulkUpdate(updateRequestList, bulkOptions, IndexCoordinates.of("payroll_index"));
     
  2. 需求二:批量更新一些文档,并且需要知道哪些文档被成功更新。
     
    List<UpdateQuery> updateQueries = ...; // 构造更新查询列表
    List<String> documentIds = elasticsearchRestTemplate.bulkUpdate(updateQueries, Book.class, IndexCoordinates.of("book_index"));
    System.out.println("Updated document IDs: " + documentIds);



    在使用 Spring Data Elasticsearch 的 ElasticsearchTemplatebulkIndex 方法时,它主要用于批量索引操作,而不是用于更新操作。bulkIndex 方法的作用是将多个索引操作批量发送到 Elasticsearch 中,以提高性能。
    如果你需要更新文档,应该使用 updatebulkUpdate 方法。以下是相关说明:

    1. bulkIndex 方法

    bulkIndex 方法主要用于批量创建或索引文档。如果文档的 ID 已经存在,它会覆盖原有的文档。因此,它在某种程度上可以用于更新操作,但它的主要功能是批量索引。
     
    elasticsearchTemplate.bulkIndex(insIndexBulkRequests, IndexCoordinates.of(EsIndexConstant.SALARY_CALCULATION_TAX));
     
    • 如果文档的 ID 不存在,它会创建新的文档。
    • 如果文档的 ID 已经存在,它会覆盖原有的文档。

    2. update 方法

    如果你需要显式地更新文档,应该使用 update 方法。update 方法允许你对文档进行部分更新,而不是完全覆盖。
     
    UpdateQuery updateQuery = UpdateQuery.builder(salaryCalculationTaxEsSave.getId())
        .withDocument(salaryCalculationTaxEsSave)
        .build();
    elasticsearchTemplate.update(updateQuery, IndexCoordinates.of(EsIndexConstant.SALARY_CALCULATION_TAX));
     

    3. bulkUpdate 方法

    如果你需要批量更新多个文档,可以使用 bulkUpdate 方法。bulkUpdate 方法允许你批量发送多个更新操作。
     
    List<UpdateQuery> updateQueries = new ArrayList<>();
    for (SalaryCalculationTaxEsSave item : salaryCalculationTaxEsSaves) {
        UpdateQuery updateQuery = UpdateQuery.builder(item.getId())
            .withDocument(item)
            .build();
        updateQueries.add(updateQuery);
    }
    elasticsearchTemplate.bulkUpdate(updateQueries, IndexCoordinates.of(EsIndexConstant.SALARY_CALCULATION_TAX));
     

    总结

    • bulkIndex:主要用于批量索引操作,如果文档 ID 已存在,会覆盖原有文档。
    • update:用于单个文档的更新操作。
    • bulkUpdate:用于批量更新多个文档。
    如果你需要更新文档,建议使用 updatebulkUpdate 方法,以确保操作的意图更加明确。
     
posted @ 2025-08-26 15:07  人在代码在  阅读(8)  评论(0)    收藏  举报