ElasticSearch 深度分页问题

ES 默认分页,超出10000条会报

1
Result window is too large

解决问题

1
2
3
4
5
6
7
8
9
10
curl -XPUT http://127.0.0.1:9200/my_index/_settings -d '{ "index" : { "max_result_window" : 500000}}'

或用kibana

PUT /goods-weight-v2/_settings
{
"index": {
"max_result_window": 10000
}
}

修改 max_result_window 的值

原因

ElasticSearch的默认深度分页机制有结不足,比如有6000条数据,当你仅想取第5000到6000条数据的时候,ES也会将前5000条数据加载到内存当中,所以ES为了避免用户的过大分页请求造成ES服务所在机器内存溢出,默认对深度分页的条数进行了限制,默认的最大条数是10000条,导致当获取第10000条数据的时候报Result window is too large异常。

注意事项

需要注意的问题,窗口值调大了后,虽然请求到分页的数据条数更多了,但它是用牺牲更多的内存、CPU资源来换取的。要考虑业务场景中过大的分页请求,是否会造成集群服务的内存溢出。