ElasticSearch 2.3 _搜索超过 10,000 个分页项目

ElasticSearch 2.3 _search for more than 10,000 paged items

在 ElasticSearch 2.3(以及最新版本)中,index.max_result_window setting which restricts the search queryfrom + size 值少于 10,000 个条目。例如

from: 0 size: 10,000 is ok
from: 0 size: 10,001 is not ok
from: 9,000 size: 1,001 is not ok

在最新版本 7.10 中,文档说可以使用 search-after 解决此问题。但是,由于遗留数据,我需要 ES 2.3 中的类似内容。请问有什么好的选择吗?

为什么我需要这个?在我们的数据中,我们有一个 child / parent 层次结构。我们 运行 针对此数据的一个查询是确定特定日期范围内的所有唯一 parent。目前我们使用 aggregate 查询检索此信息。即

{
  "query": { "match_all_in_date_range": {} },
  "aggs": {
    "parents": {
      "terms": {
        "field": "parentId"
      }
    }
  }
}

其中,有趣的是,即使有超过 10,000 个,returns 所有 parent 也是如此。即它似乎不受 index.max_result_window 限制的影响。

但是这种聚合既昂贵又耗时。因此,我正在评估是否可以删除它并在我们自己的代码中“聚合”数据。即检索所有 objects,读取它们的 parentId 字段,并记录唯一 ID。

看起来 index.max_result_window 限制可能会打破这个想法。即除非我弄错了。我必须解决这个问题的两个想法是

但我很想知道我是否还有其他选择?

您可以将搜索分成更小的部分,例如按小时分隔,或按其他字段分隔,这样每个搜索 returns 少于 10,000 个结果