计算机系统应用教程网站

网站首页 > 技术文章 正文

Elasticsearch 分页查询 from + size 浅分页

btikc 2024-10-16 08:22:31 技术文章 16 ℃ 0 评论

from + size 浅分页

"浅"分页可以理解为简单意义上的分页。

elasticsearch是通过协调节点从每个shard中都获取from+size条数据返回给协调节点后,由协调节点汇总排序,然后查找[from , frome+size] 之间的数据,并返回給前端。

from:未指定,默认值是 0,注意不是1,代表当前页返回数据的起始偏移量。

size:未指定,默认值是10,代表当前页返回数据的条数。

需要注意的是,from + size 不能超过10000,也就是说在前10000条之内,可以随意翻页,10000条之后就不行了。

实际上,通过设置 index.max_result_window 可以修改这个限制,但是不建议这么做,因为这种方式翻页越深效率越低。

# from+size查询
GET /ad/_search
{
    "query":{
        "match_all":{

        }
    },
    "from":0,
    "size":2
}

# 输出结果
{
    "took":0,
    "timed_out":false,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":11,
            "relation":"eq"
        },
        "max_score":1,
        "hits":[
            {
                "_index":"ad",
                "_type":"_doc",
                "_id":"1",
                "_score":1,
                "_source":{
                    "name":"phone 8",
                    "price":6000,
                    "color":"white",
                    "ad":"this is a white phone",
                    "label":[
                        "white",
                        "nice"
                    ]
                }
            },
            {
                "_index":"ad",
                "_type":"_doc",
                "_id":"2",
                "_score":1,
                "_source":{
                    "name":"xiaomi 8",
                    "price":4000,
                    "color":"red",
                    "ad":"this is a red phone",
                    "label":[
                        "white",
                        "xiaomi"
                    ]
                }
            }
        ]
    }
}

其中,from定义了目标数据的偏移值,size定义当前返回的数目。默认from为0,size为10,即所有的查询默认仅仅返回前10条数据。

在这里有必要了解一下from/size的原理:

因为elasticsearch是基于分片的,假设有5个分片,from=100,size=10。则会根据排序规则从5个分片中各取回110条数据数据,然后汇总成550条数据排序后的前10条数据。

测试发现,越往后的分页,执行的效率越低。总体上会随着from的增加,消耗时间也会增加。而且数据量越大,就越明显!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表