使用elasticsearch做分页查询时,当查询记录超过10000时,会报如下错误:
Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://127.0.0.1:9200], URI [/resource_center/resource_sentiment_bj/_search?rest_total_hits_as_int=true&typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=dfs_query_then_fetch&batched_reduce_size=512], status line [HTTP/1.1 500 Internal Server Error]
{"error":{"root_cause":[{"type":"query_phase_execution_exception","reason":"Result window is too large, from + size must be less than or equal to: [10000] but was [10010]. 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 setting."}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"dfs","grouped":true,"failed_shards":[{"shard":0,"index":"resource_center","node":"BrBtouHeQUOEwSkZFEVjnA","reason":{"type":"query_phase_execution_exception","reason":"Result window is too large, from + size must be less than or equal to: [10000] but was [10010]. 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 setting."}}]},"status":500}
查阅文档可知,默认只能查询到10000:
index.max_result_window
The maximum value of from + size for searches to this index.
Defaults to 10000. Search requests take heap memory and time proportional to from + size and this limits that memory.
See Scroll or Search After for a more efficient alternative to raising this.
解决方法:
修改一下设置,把这个设置到自己想要的极限即可,我这里设置1000000:
PUT index_name/_settings
{
"index":{
"max_result_window":1000000
}
}
修改成功后返回:
{
"acknowledged": true
}
然后再去查询就可以了。