ElasticSearch分页查询详解-----------深度分页(from-size)和快照分页(scroll)

本文详细介绍了ElasticSearch中实现分页查询的两种方式:深度分页(from-size)和快照分页(scroll)。深度分页通过设置from和size参数,但随着偏移值增大,效率降低。快照分页通过维护查询时的索引快照,适用于大量数据一次性查询,效率更高。文中还提供了Java API实现这两种分页的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回。那么,如何实现分页查询呢?

 

      按照一般的查询流程来说,如果我想查询前10条数据:

        1)客户端请求发给某个节点

        2)节点转发给个个分片,查询每个分片上的前10条

        3)结果返回给节点,整合数据,提取前10条

        4)返回给请求客户端

    那么当我想要查询第10条到第20条的数据该怎么办呢?这个时候就用到分页查询了。

    在ElasticSearch中实现分页查询的方式有两种,分别为深度分页(from-size)和快照分页(scroll)

    1.深度分页(from-size)

    原理很简单,就是查询前20条数据,然后截断前10条,只返回10-20的数据。这样其实白白浪费了前10条的查询。

    查询API如下:

 

 
  1. {

  2. "from" : 0, "size" : 10,

  3. "query" : {

  4. "term" : { "user" : "kimchy" }

  5. }

  6. }

 

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

     做过测试,越往后的分页,执行的效率越低。也就是说,分页的偏移值越大,执行分页查询时间就会越长!

   2. 快照分页(scroll)

 

     相对于from和size的分页来说,使用scroll可以模拟一个传统数据的游标,记录当前读取的文档信息位置。这个分页的用法,不

是为了实时查询数据,而是为了一次性查询大量的数据(甚至是全部的数据)。因为这个scroll相当于维护了一份当前索引段的快照

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值