一尘不染

Elasticsearch 2.1:“结果”窗口太大(index.max_result_window)

elasticsearch

我们从Elasticsearch 2.1检索信息,并允许用户翻阅结果。当用户请求较高的页码时,我们会收到以下错误消息:

结果窗口太大,从+大小必须小于或等于:[10000],但为[10020]。请参阅滚动API,以获取请求大型数据集的更有效方法。可以通过更改[index.max_result_window]索引级别参数来设置此限制

弹性文档表示,这是因为内存消耗很高,并且要使用滚动api:

大于的值会在每次搜索和执行搜索的每个分片上消耗大量的堆内存。保留此值是最安全的,因为它是任何深度滚动使用的滚动API
https://www.elastic.co/guide/zh-
cn/elasticsearch/reference/2.x/breaking_21_search_changes.html#_from_size_limits

问题是我不想检索大型数据集。我只想从数据集中检索一个切片,该切片在结果集中很高。滚动文档也说:

滚动不适用于实时用户请求https://www.elastic.co/guide/en/elasticsearch/reference/2.2/search-
request-
scroll.html

这给我一些问题:

1)如果我使用滚动api向上滚动到结果10020(而不考虑低于10000的所有内容),而不是对结果10000-10020进行“正常”搜索,则内存消耗是否会真正降低(如果有,为什么)?

2)滚动API似乎不是我的选择,但我必须增加“ index.max_result_window”。有人对这个有经验么?

3)还有其他选择可以解决我的问题吗?


阅读 708

收藏
2020-06-22

共1个答案

一尘不染

弹性文档中的以下页面讨论深度分页:

https://www.elastic.co/guide/en/elasticsearch/guide/current/pagination.html

https://www.elastic.co/guide/en/elasticsearch/guide/current/_fetch_phase.html

根据文档的大小,分片的数量以及所使用的硬件,完全可以分页10,000至50,000个结果(1,000至5,000页)。但是,通过足够大的值,使用大量的CPU,内存和带宽,排序过程的确会变得非常繁重。因此,我们强烈建议您不要进行深度分页。

2020-06-22