欢迎光临散文网 会员登陆 & 注册

es突破查询10000的限制

2023-09-10 12:14 作者:取悦疾风  | 我要投稿

Elasticsearch 官方默认限制索引查询最多只能查询10000条数据,查询第10001条数据开始就会报错:

Result window is too large, from + size must be less than or equal to

但是很多时候10000数据不能满足项目的需求,所以我们就要解除这个限制。

解决方案

第一种办法:

在 restful 请求时,解除索引最大查询数的限制

_all表示所有索引,如果针对单个索引的话修改成索引名称即可!!!

例如

http://127.0.0.1:9200/enterprise/_settings

第二种办法:

在创建索引的时候加上

但是修改完之后,通过api查询回来的totalhits还是只有10000条???

解决如下 :

在查询时候把 track_total_hits 设置为 true。

track_total_hits 设置为false禁用跟踪匹配查询的总点击次数

设置为true就会返回真实的命中条数。

java代码在构建条件时候加上:

searchSourceBuilder.trackTotalHits(true);

rest请求查询时:

elasticsearch中max_result_window有上限限制:

原因分析

es对from + size的大小进行限制,必须小于等于10000。

解决方案

在业务中限制分页大小,使from+size<=10000;

动态更改索引设置,为max_result_window参数赋值足够大的值;

es默认最大返回数是10000,支持的最大返回数是2^31-1,也就是2147483647,不建议设置太大,query数据时size不要太大,总得考虑内存消耗的,设置了返回max后可以用分页获取, from:num_a, size:num_b,获取的就是num_a+1到num_a+num_b的数据。


es突破查询10000的限制的评论 (共 条)

分享到微博请遵守国家法律