elasticsearch 深度分頁以及scroll 滾動搜索


深度分頁

深度分頁其實就是搜索的深淺度,比如第1頁,第2頁,第10頁,第20頁,是比較淺的;第10000頁,第20000頁就是很深了。

使用如下操作:

{
      "query": {
            "match_all": {}
      },
      "from": 9999,
      "size": 10
}

我們在獲取第9999條到10009條數據的時候,其實每個分片都會拿到10009條數據,然后集合在一起,總共是10009*3=30027條數據(分片3個),針對30027數據再次做排序會獲取最后10條數據。
如此一來,搜索得太深,就會造成性能問題,會耗費內存和占用cpu。而且es為了性能,他不支持超過一萬條數據以上的分頁查詢。那么如何解決深度分頁帶來的問題,我們應該避免深度分頁操作(限制分頁頁數),比如最多只能提供100頁的展示,從第101頁開始就沒了,畢竟用戶也不會搜的那么深,我們平時搜索淘寶或者京東也就看個10來頁就頂多了。

scroll 滾動搜索

一次性查詢1萬+數據,往往會造成性能影響,因為數據量太多了。這個時候可以使用滾動搜索,也就是 scroll 。
滾動搜索可以先查詢出一些數據,然后再緊接着依次往下查詢。在第一次查詢的時候會有一個滾動id,相當於一個錨標記 ,隨后再次滾動搜索會需要上一次搜索滾動id,根據這個進行下一次的搜索請求。每次搜索都是基於一個歷史的數據快照,查詢數據的期間,如果有數據變更,那么和搜索是沒有關系的。
具體官網文檔:https://www.elastic.co/guide/cn/elasticsearch/guide/current/scroll.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM