根据关键字分页搜索

使用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=="
}
posted @ 2020-11-16 17:48  哈喽哈喽111111  阅读(243)  评论(0编辑  收藏  举报