繁体   English   中英

通过查询更新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()的调用bulkRequestBuilder.get()返回。 (指示ElasticSearch引擎的Async性质)。

有人可以建议如何使其Sync所有文档吗?

通常,索引/更新大量数据的问题来自ES的segment merging ES人员的一个技巧是在索引/更新大量数据之前禁用刷新。

您可以在索引为refresh_interval=-1之前实现此更新索引refresh_interval,一旦对所有数据建立索引, refresh_interval=-1其返回到先前的索引配置。

调索引速度

最终,我发现了ElasticSearch引擎花费时间进行更新的核心问题(可能是默认性质)。

默认情况下,ElasticSearch引擎更新本质上是ASYNC (正如我已经在问题中指出的那样)。 有几个链接正在解释此默认行为。

例如,ElasticSearch GET API 文档指出,为了获取文档,elasticsearch引擎会进行refresh以查看所有以前的更新(如果有)。 这表明弹性搜索的ASYNC性质导致我的文档立即搜索,而没有提供更新的文档。

截至目前,要继续执行现有行为,请按如下所示在SYNC触发批量更新。

bulkRequestBuilder.setReplicationType(ReplicationType.SYNC).setRefresh(true).get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM