深度分頁
深度分頁其實就是搜索的深淺度,比如第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