我们从Elasticsearch 2.1检索信息,并允许用户通过结果进行分页.当用户请求高页码时,我们收到以下错误消息:
结果窗口太大,+大小必须小于或等于:[10000]但是[10020].有关请求大型数据集的更有效方法,请参阅scroll api.可以通过更改[index.max_result_window]索引级别参数来设置此限制
弹性文档说这是因为高内存消耗和使用滚动API:
高于的值会占用每次搜索和执行搜索的每个分片的大量堆内存.保留此值是最安全的,因为它是使用滚动API进行任何深度滚动https://www.elastic.co/guide/en/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)还有其他选择来解决我的问题吗?
小智 73
如果你需要大的深度分页,我认为只有一种解决方案是增加值max_result_window
curl -XPUT "http://localhost:9200/my_index/_settings" -d '{ "index" : { "max_result_window" : 500000 } }'
Run Code Online (Sandbox Code Playgroud)
内存使用量的增加,我找不到~100k的值
Guy*_*ski 28
正确的解决方案是使用滚动.
但是,如果要将结果search返回超过10,000个结果,可以使用Kibana轻松完成:
转到Dev Tools并将以下内容发布到索引(your_index_name),指定新的最大结果窗口
PUT your_index_name/_settings
{
"max_result_window" : 500000
}
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,您应该看到以下成功响应:
{
"acknowledged": true
}
Run Code Online (Sandbox Code Playgroud)
Ron*_*ald 21
弹性文档中的以下页面讨论了深度分页:
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,内存和带宽,排序过程确实会变得非常沉重.出于这个原因,我们强烈建议不要进行深度分页.
| 归档时间: |
|
| 查看次数: |
63206 次 |
| 最近记录: |