elasticsearch"阻止直到刷新" /"等待doc可搜索"备择方案

时间:2015-01-23 14:13:14

标签: performance optimization elasticsearch

我需要在Elasticsearch中索引/更新文档并等待它可搜索(已完成刷新)。 Github上有一个相关的问题:https://github.com/elasticsearch/elasticsearch/issues/1063

我不会强制刷新,因为它会影响索引性能,我需要经常执行此操作。 我按照Github问题的描述尝试等待1秒钟。只要Elasticsearch没有承受压力,它就能很好地运行,但是当没有多少RAM(偶尔可能会发生)时,我看到刷新需要5到6秒。因此我尝试了另一种方式。

我在后端编写了一个辅助函数,等待“可搜索”文档达到给定版本。这很简单:

- GET the document with realtime=false
- if there is a result
    - if result.version >= wanted.version.
        Return
    - else
        wait a little more and retry
- else if the doc is not found
    - HEAD the document with realtime=true (test if the doc exists in the transaction log)
        - if the doc is found (then it has just been created)
            wait a little more and retry
        - else
            Return. (the doc might have been created and deleted really fast)

所需版本是文档索引后由elasticsearch返回的版本。

这种算法有效,但你可以看到它远非完美。

  • 首先它会在压力下对弹性搜索进行更多调用,这不是一个好主意。

  • 我发现弹性搜索会在删除文档一段时间后重置版本号。如果由于某种原因该函数错过了,我们可能会等到doc再次达到此版本。 (这就是为什么我也加了一个超时)。

有人有更好的解决方案吗?现在自动缩放不是一个可接受的答案。

1 个答案:

答案 0 :(得分:3)

正如GuillaumeMassé所说,解决方案即将合并到Elasticsearch https://github.com/elastic/elasticsearch/issues/1063#issuecomment-223368867

因此,我建议等待内置功能,而不是实现自定义解决方案。