【问题标题】:ElasticSearch 1.7 (Spring Data ElasticSearch) update by query takes lot of time to update documentsElasticSearch 1.7(Spring Data ElasticSearch)通过查询更新需要大量时间来更新文档
【发布时间】:2019-06-08 11:23:21
【问题描述】:

我的应用程序允许在单个请求中更新多个 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() 的调用甚至在文档更新之前返回。 (表明Async ElasticSearch 引擎的性质)。

有人可以建议如何使其成为所有文档的Sync 更新吗?

【问题讨论】:

    标签: spring-boot elasticsearch nosql spring-data-elasticsearch


    【解决方案1】:

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

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

    Tune-indexing-speed

    【讨论】:

    • 禁用刷新将无济于事,因为我提到该过程是异步的,一旦调用返回给调用者,假设所有文档都在之前的成功调用中更新,则会触发一个新的搜索文档。这使得搜索调用获取旧文档。
    • .add 不调用索引。如果您批量处理,则必须更新/插入每 n 个(比如说 1000 个)文档。在这里,您构建了一个巨大的请求,并一次性更新。循环查看您的文档,每 1000 次更新并重置您的请求构建器,重复一遍。
    • 似乎我误解了你的问题,另一方面,@LeBigCat 说你需要一次重新创建你的 bulkRequest 。这里有另一篇与bulkRequestBuilder 相关的帖子,可能会对您有所帮助。 stackoverflow.com/questions/22950788/…
    【解决方案2】:

    最后我发现了核心问题(可能是默认性质),ElasticSearch 引擎的更新需要时间。

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

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

    到目前为止,要继续现有行为,请在SYNC 中触发批量更新,如下所示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 2017-01-02
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多