我们从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)还有其他选择可以解决我的问题吗?
'Result window is too large, from + size must be less than or equal to: [10000] but was [47190]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level parameter.')
它说有4719页(每10页显示结果)。而且我认为您的建议有效。