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 query 到 from
+ 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
限制可能会打破这个想法。即除非我弄错了。我必须解决这个问题的两个想法是
- 我应该修改查询以排除我已经检索到的
parentIds
而不是分页(缺点是 运行 可能需要更长的时间,并且会导致查询增长直到结束)
- 转向更重的 scroll API(可能更适合其他用途)
但我很想知道我是否还有其他选择?
您可以将搜索分成更小的部分,例如按小时分隔,或按其他字段分隔,这样每个搜索 returns 少于 10,000 个结果
在 ElasticSearch 2.3(以及最新版本)中,index.max_result_window setting which restricts the search query 到 from
+ 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
限制可能会打破这个想法。即除非我弄错了。我必须解决这个问题的两个想法是
- 我应该修改查询以排除我已经检索到的
parentIds
而不是分页(缺点是 运行 可能需要更长的时间,并且会导致查询增长直到结束) - 转向更重的 scroll API(可能更适合其他用途)
但我很想知道我是否还有其他选择?
您可以将搜索分成更小的部分,例如按小时分隔,或按其他字段分隔,这样每个搜索 returns 少于 10,000 个结果