es突破查詢10000的限制
Elasticsearch 官方默認限制索引查詢最多只能查詢10000條數(shù)據(jù),查詢第10001條數(shù)據(jù)開始就會報錯:
Result window is too large, from + size must be less than or equal to
但是很多時候10000數(shù)據(jù)不能滿足項目的需求,所以我們就要解除這個限制。
解決方案
第一種辦法:
在 restful 請求時,解除索引最大查詢數(shù)的限制
_all表示所有索引,如果針對單個索引的話修改成索引名稱即可!?。?/span>
例如

http://127.0.0.1:9200/enterprise/_settings
第二種辦法:
在創(chuàng)建索引的時候加上
但是修改完之后,通過api查詢回來的totalhits還是只有10000條???
解決如下 :
在查詢時候把 track_total_hits 設(shè)置為 true。
track_total_hits 設(shè)置為false禁用跟蹤匹配查詢的總點擊次數(shù)
設(shè)置為true就會返回真實的命中條數(shù)。
java代碼在構(gòu)建條件時候加上:
searchSourceBuilder.trackTotalHits(true);

rest請求查詢時:
elasticsearch中max_result_window有上限限制:
原因分析
es對from + size的大小進行限制,必須小于等于10000。
解決方案
在業(yè)務(wù)中限制分頁大小,使from+size<=10000;
動態(tài)更改索引設(shè)置,為max_result_window參數(shù)賦值足夠大的值;
es默認最大返回數(shù)是10000,支持的最大返回數(shù)是2^31-1,也就是2147483647,不建議設(shè)置太大,query數(shù)據(jù)時size不要太大,總得考慮內(nèi)存消耗的,設(shè)置了返回max后可以用分頁獲取, from:num_a, size:num_b,獲取的就是num_a+1到num_a+num_b的數(shù)據(jù)。