Elasticsearch 使用scroll滾動技術實現大資料量搜尋
阿新 • • 發佈:2019-01-25
如果一次性要查出來比如10萬條資料,那麼效能會很差,此時一般會採取用scroll滾動查詢,一批一批的查,直到所有資料都查詢完為止。
- scroll搜尋會在第一次搜尋的時候,儲存一個當時的檢視快照,之後只會基於該舊的檢視快照提供資料搜尋,如果這個期間資料變更,是不會讓使用者看到的
- 採用基於_doc(不使用_score)進行排序的方式,效能較高
- 每次傳送scroll請求,我們還需要指定一個scroll引數,指定一個時間視窗,每次搜尋請求只要在這個事件視窗內能完成就可以了
//sort預設是相關度排序("sort":[{"FIELD":{"order":"desc"}}]),不按_score排序,按_doc排序
//size設定的是這批查三條
//第一次查詢會生成快照
GET /lib3/user/_search?scroll=1m #這一批查詢在一分鐘內完成
{
"query":{
"match":{}
},
"sort":[
"_doc"
],
"size":3
}
//第二次查詢通過第一次的快照ID來查詢,後面以此類推
GET /_search/scroll
{
"scroll":"1m",
"scroll_id":"DnF1ZXJ5VGhIbkXIdGNoAwAAAAAAAAAdFkEwRENOVTdnUUJPWVZUd1p2WE5hV2cAAAAAAAAAHhZBMERDTIU3Z1FCT1|WVHdadIhOYVdnAAAAAAAAAB8WQTBEQ05VN2dRQk9ZVIR3WnZYTmFXZw=="
}