List<UpdateQuery> updateQueries = ...;
在使用 Spring Data Elasticsearch 的 ElasticsearchTemplate 的 bulkIndex 方法时,它主要用于批量索引操作,而不是用于更新操作。bulkIndex 方法的作用是将多个索引操作批量发送到 Elasticsearch 中,以提高性能。
如果你需要更新文档,应该使用 update 或 bulkUpdate 方法。以下是相关说明:
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));
总结
如果你需要更新文档,建议使用 update 或 bulkUpdate 方法,以确保操作的意图更加明确。