ES日志报错赏析-Result window is too large

2022-07-11 17:37:55 浏览数 (1)

报错现象

日志中可查看到相关报错信息,含义:深度分页必须小于等于10000,而现在达到了20000。

代码语言:javascript复制
Result window is too large, from   size must be less than or equal to: [10000]
but was (20000]

报错分析

为了避免用户使用过大的分页请求导致集群 OOM,ES 具有默认的深分页限制,最大为10000。

特别说明:如果使用了腾讯云默认的索引模板创建索引,"max_result_window" 的限制为65536

解决方案

短期方案

调整集群的默认分页限制参数

调整单个索引,indexname 为索引名称

代码语言:javascript复制
curl -XPUT http://x.x.x.x:9200/indexname/_settings -d '{"index": {"max_result_window": 65535}}'

调整集群所有索引

代码语言:javascript复制
curl -XPUT http://x.x.x.x:9200/_all/_settings -d '{"index": {"max_result_window": 65535}}'

长期方案

临时调整参数的方式可解决无法查询超过10000条的问题,但会给集群带来较大的负担,影响性能,建议通过 scroll 来优化此类查询。

使用方式

代码语言:javascript复制
curl -XGET http://x.x.x.x:9200/indexname/_search?scroll=1m   //保持游标查询窗口的时间
{
    "query": { "match_all": {}},
    "sort" : ["_doc"],   //关键字 _doc 是最有效的排序顺序。
    "size":  1000
}    

保持游标查询窗口的时间是指针对当前批处理的时间,而不是处理所有结果的时间。单个窗口的保持对于集群是有资源消耗的,因此这个时间不宜过长。更多设置方式,可参考 ES 原厂文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.3/scroll-api.html

0 人点赞