ElasticSearch 1.7 (Spring Data ElasticSearch) 通过查询更新需要花费大量时间来更新文档
ElasticSearch 1.7 (Spring Data ElasticSearch) update by query takes lot of time to update documents
我的应用程序允许在单个请求中更新多个 elasticsearch documents
。
我使用 ElasticSearch BulkRequestBuilder
批量更新所有此类文档。
BulkRequestBuilder bulkRequestBuilder = elasticSearchClient.prepareBulk();
documents.forEach(id -> {
UpdateRequest updateRequest = new UpdateRequestBuilder(elasticSearchClient)
.setType("MyDocumentType")
.setIndex("MyDocumentIndex")
.setId(id)
.setDoc("fieldName", "valueToBeUpdated")
.request();
bulkRequestBuilder.add(updateRequest);
});
//update in bulk
bulkRequestBuilder.get();
所有文档都用 valueToBeUpdated
更新,但 ElasticSearch 内部需要时间来更新所有文档,但甚至在文档更新之前调用 bulkRequestBuilder.get()
returns。 (表明 ElasticSearch 引擎的 Async
性质)。
任何人都可以建议如何使其成为所有文档的 Sync
更新吗?
通常问题 indexing/updating 大量数据来自 segment merging
来自 ES 。
来自 ES 人员的一个提示是在 indexing/updating 大量数据之前禁用刷新。
您可以在索引到 refresh_interval=-1
之前实现此更新索引 refresh_interval,一旦您的所有数据都被索引 return 到您之前的索引配置。
我终于找到了 ElasticSearch
引擎更新需要时间的核心问题(可能是默认问题)。
默认情况下,ElasticSearch 引擎更新本质上是 ASYNC
(正如我在问题中指出的那样)。有几个链接解释了这种默认行为。
例如ElasticSearch GET
API Documentation 声明为了获取文档,elasticsearch 引擎执行 refresh
以便查看所有以前的更新(如果有)。这暗示 ASYNC
弹性搜索的性质导致立即搜索我的文档而不提供更新的文档。
现在要继续现有行为,请按如下方式在 SYNC
中触发批量更新。
bulkRequestBuilder.setReplicationType(ReplicationType.SYNC).setRefresh(true).get();
我的应用程序允许在单个请求中更新多个 elasticsearch documents
。
我使用 ElasticSearch BulkRequestBuilder
批量更新所有此类文档。
BulkRequestBuilder bulkRequestBuilder = elasticSearchClient.prepareBulk();
documents.forEach(id -> {
UpdateRequest updateRequest = new UpdateRequestBuilder(elasticSearchClient)
.setType("MyDocumentType")
.setIndex("MyDocumentIndex")
.setId(id)
.setDoc("fieldName", "valueToBeUpdated")
.request();
bulkRequestBuilder.add(updateRequest);
});
//update in bulk
bulkRequestBuilder.get();
所有文档都用 valueToBeUpdated
更新,但 ElasticSearch 内部需要时间来更新所有文档,但甚至在文档更新之前调用 bulkRequestBuilder.get()
returns。 (表明 ElasticSearch 引擎的 Async
性质)。
任何人都可以建议如何使其成为所有文档的 Sync
更新吗?
通常问题 indexing/updating 大量数据来自 segment merging
来自 ES 。
来自 ES 人员的一个提示是在 indexing/updating 大量数据之前禁用刷新。
您可以在索引到 refresh_interval=-1
之前实现此更新索引 refresh_interval,一旦您的所有数据都被索引 return 到您之前的索引配置。
我终于找到了 ElasticSearch
引擎更新需要时间的核心问题(可能是默认问题)。
默认情况下,ElasticSearch 引擎更新本质上是 ASYNC
(正如我在问题中指出的那样)。有几个链接解释了这种默认行为。
例如ElasticSearch GET
API Documentation 声明为了获取文档,elasticsearch 引擎执行 refresh
以便查看所有以前的更新(如果有)。这暗示 ASYNC
弹性搜索的性质导致立即搜索我的文档而不提供更新的文档。
现在要继续现有行为,请按如下方式在 SYNC
中触发批量更新。
bulkRequestBuilder.setReplicationType(ReplicationType.SYNC).setRefresh(true).get();