整理 Elasticsearch 三種分頁方式

2021-10-06 09:40:28 字數 2228 閱讀 4444

目錄

1、from + size 淺分頁

from/size的原理:

2、scroll 深分頁

scroll原理:

3、search_after 深分頁

search_after的原理:

"淺"分頁可以理解為簡單意義上的分頁。它的原理很簡單,就是查詢前20條資料,然後截斷前10條,只返回10-20的資料。這樣其實白白浪費了前10條的查詢。

get test_dev/_search}]

}},

"size": 10,

"from": 20,

"sort": [

,"_id":

}]}

其中,from定義了目標資料的偏移值,size定義當前返回的數目。預設from為0,size為10,即所有的查詢預設僅僅返回前10條資料。

在這裡有必要了解一下

因為es是基於分片的,假設有5個分片,from=100,size=10。則會根據排序規則從5個分片中各取回100條資料資料,然後彙總成500條資料後選擇最後面的10條資料。

做過測試,越往後的分頁,執行的效率越低。總體上會隨著from的增加,消耗時間也會增加。而且資料量越大,就越明顯!

from+size查詢在10000-50000條資料(1000到5000頁)以內的時候還是可以的,但是如果資料過多的話,就會出現深分頁問題。

get test_dev/_search?scroll=5m}]

}},

"size": 10,

"from": 0,

"sort": [

,"_id":

}]}

scroll=5m

get _search/scroll

注意:請求的介面不再使用索引名了,而是 _search/scroll,其中get和post方法都可以使用。

scroll刪除:

根據官方文件的說法,scroll的搜尋上下文會在scroll的保留時間截止後自動清除,但是我們知道scroll是非常消耗資源的,所以乙個建議就是當不需要了scroll資料的時候,盡可能快的把scroll_id顯式刪除掉。

清除指定的scroll_id:

delete _search/scroll/dnf1zxj5vghlbkzldgno.....

清除所有的scroll:

delete _search/scroll/_all

scroll的方式,官方的建議不用於實時的請求(一般用於資料匯出),因為每乙個 scroll_id 不僅會占用大量的資源,而且會生成歷史快照,對於資料的變更不會反映到快照上。

為了找到每一頁最後一條資料,每個文件必須有乙個全域性唯一值,官方推薦使用 _uid 作為全域性唯一值,其實使用業務層的 id 也可以。

get test_dev/_search}]

}},

"size": 20,

"from": 0,

"sort": [

,"_id":

}]}

使用search_after必須要設定from=0。

get test_dev/_search}]

}},

"size": 10,

"from": 0,

"search_after": [

1541495312521,

"d0xh6gybbtbwbqsp0j1a"

],"sort": [

,"_id":

}]}

上面es的dsl查詢語句翻譯成sql 如下:

select * from test_dev where age=28 update_time<1541495312521 and _id

Elasticsearch 文章整理

elasticsearch索引生命週期管理方案 managing jaeger and elasticsearch ilm elasticsearch 如何實現查詢 聚合不區分大小寫 elasticsearch 索引管理最佳實踐 你的 elasticsearch 難題,官方文件早就有了答案 幾個el...

(整理)elasticsearch相關概念

參考 elasticsearch權威指南 elasticsearch sql elasticsearch查詢 elasticsearch multifields說明 23種非常有用的elasticsearch查詢例子 推薦書籍 elasticsearch伺服器開發 資料同步外掛程式 待補充index...

ElasticSearch基礎知識整理

分片shards 資料量特大,沒有足夠大的硬碟空間來一次性儲存,且一次性搜尋那麼多的資料,響應跟不上es提供把資料進行分片儲存,這樣方便進行拓展和提高吞吐。副本replicas 分片的拷貝,當主分片不可用的時候,副本就充當主分片進行使用 es中的每個索引預設分配5個主分片和1份副本 如果你的集群中至...