根據關鍵字分頁搜尋
阿新 • • 發佈:2020-11-16
使用from和size來進行分頁
在執行查詢時,可以指定from(從第幾條資料開始查起)和size(每頁返回多少條)資料,就可以輕鬆完成分頁。
- from = (page – 1) * size
GET /job_idx/_search { "from": 0, "size": 5, "query": { "multi_match": { "query": "銷售", "fields": [ "title", "jd" ] } } }
使用scroll方式進行分頁
使用from和size方式,查詢在1W-5W條資料以內都是OK的,但如果資料比較多的時候,會出現效能問題。
Elasticsearch做了一個限制,不允許查詢的是10000條以後的資料。如果要查詢1W條以後的資料,需要使用Elasticsearch中提供的scroll遊標來查詢。
在進行大量分頁時,每次分頁都需要將要查詢的資料進行重新排序,這樣非常浪費效能。使用scroll是將要用的資料一次性排序好,然後分批取出。效能要比from + size好得多。
使用scroll查詢後,排序後的資料會保持一定的時間,後續的分頁查詢都從該快照取資料即可。
第一次使用scroll分頁查詢
讓排序的資料保持1分鐘,所以設定scroll為1m
GET /job_idx/_search?scroll=1m
{
"query": {
"multi_match": {
"query": "銷售",
"fields": [
"title",
"jd"
]
}
},
"size": 100
}
執行後,注意到在響應結果中有一項_scroll_id
,後續需要根據這個_scroll_id
來進行查詢
第二次直接使用scroll id進行查詢
有可能執行報錯,修改第一次執行的分頁查詢,設定scroll為5m,"size": 1000後獲取scroll id,然後在進行第二次分頁查詢
GET _search/scroll?scroll=1m
{
"scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFDRXT0IwSFVCa05lVVVxR1NOZGhqAAAAAAAADHoWSlhlMWozQUtUazZEendPS0lCc1d3Zw=="
}