Elasticsearch(九)分页查询

目录

1、分页查询

查询阶段

返回阶段

深度分页

2、扫描(scan)和滚屏(scroll)

scroll滚屏

scan 扫描


1、分页查询

查询阶段

在初始化查询阶段,查询被向索引中的每个分片副本(原本或副本)广播。每个分片在本地执行搜索并且建立了匹配 文档的 优先队列。

优先队列:一个存有前 n 个 匹配 文档 的有序列表。这个优先队列的大小由分页参数 from 和 size决定。

GET /_search
{
    "from": 90,
    "size": 10
}

如图:

1. 客户端发送一个 分页查询请求 给 Node3,Node3 创建了一个长度为 from + size 的空优先级队列。

2.Node3 转发这个请求到索引中每个分片的原本或副本(只转发一个分片原本或副本中的一个),每个分片在本地执行这个查询并将结果放到一个大小为 from +size 的本地优先队列中。

3.每个分片返回 文档 的 ID 和它优先队列里的所有 文档的排序值给协调节点 Node3。Node3 把这些值合并到自己的优先队列里产生全局排序结果。

返回阶段

查询阶段时结果已经汇聚到了 协调节点Node3。例如根据指定查询 from:90, size: 10,那么前90条将会被丢弃,只有之后的10条需要返回给客户端。

深度分页

如上所示,如果from的值比较大,则意味着优先队列会比较庞大,每个分片的优先队列再汇聚到协调节点那就更庞大了,所以以上分页方式只适合浅层次的分页,深度分页需要用到 scan或scroll技术。

2、扫描(scan)和滚屏(scroll)

scan、scroll 可以高效地取回巨大数量的结果而不需要付出深分页的代价。

scroll滚屏

scroll类似于数据库中的游标 cursor。

滚屏搜索会即时制作快照。这个快照就是当前的一个数据副本,不会在搜索后被修改,直到快照到达过期时间自动销毁。

scan 扫描

深度分页代价最高的部分是对结果的全局排序,如果禁用排序,就可以以很低的代价获取全部返回结果。scan 就是采用这种搜索模式,不排序,只要分片里还有结果可以返回,就返回一批结果。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值