天天看點

Elasticsearch聚合後分頁

20200728補充

評論大佬說可以使用bucket_sort分頁

請參考ElasticSearch 實作資料分頁(bucket_sort的使用)

------------------原版↓-----------------

早上寫了一篇

Elasticsearch去重查詢/過濾重複資料(聚合)

但是沒寫分頁實作,因為網上和書上暫時沒查到什麼友善又好的聚合後分頁方式,不是我故意不寫的

Elasticsearch聚合後分頁

之前也看了下面這篇文章

Elasticsearch聚合後分頁深入詳解

文章裡面說了,es本身不支援分頁,因為性能和正确性得不到保障,作者提供了一個方法,屬于笨方法,就是把聚合後的資料全存入記憶體中,例如放List中,然後自己根據分頁參數(偏移量和頁大小),使用List中的方法subList來截取資料

ps:笨方法:就比如做算法題,雖然能用暴力求解,但是性能和技巧性都很勸退我,但是如果沒什麼好辦法,為了實作業務,如果場景允許,也是可以用的

這樣做的弊端顯而易見,如果聚合後的資料過大,會占用太多記憶體空間,性能也不好。

但是,如果查詢的頁面資料量不是很大,比如幾百幾千的,如果資料結構不太複雜,list長度是幾萬也沒問題

這種情況下,用

ps:記得一個同僚從MySQL拿10w條資料出來拼然後導出,被某個年限多點的同僚吐槽質疑,實際上10w就占十幾mb,遠小于JVM的記憶體空間,比年輕代還小不少,這些朝生夕死的對象下次gc就被清除了,這樣用沒什麼問題

把資料查出來,然後根據頁碼和頁大小截取list,就8用我多說了8

Elasticsearch聚合後分頁