1. 程式人生 > 實用技巧 >根據關鍵字分頁搜尋

根據關鍵字分頁搜尋

使用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=="
}