ElasticSearch最佳入门实践(三十五)分页搜索以及deep paging性能问题深度揭秘

1、如何使用es进行分页搜索的语法

size,from
GET /_search?size=10
GET /_search?size=10&from=0
GET /_search?size=10&from=20

在这里插入图片描述

假设将这6条数据分成3页,每一页是2条数据,来实验一下这个分页搜索的效果
在这里插入图片描述

2、什么是deep paging问题?为什么会产生这个问题,它的底层原理是什么?

deep paging 简单来说就是检索的特别深

比如共有60000条数据,每个shard上分配了 20000 条数据,每页是10条数据,这个时候,你检索到第 1000 页,实际上要拿到的是 10001 ~ 10010 这个范围的数据 。 因为所有的数据是分布在3个shard上的,可能检索的时候还有各种条件,各种聚合分析,那这个范围的数据该怎么拿到。

发起请求后,你的请求可能是打到一个不包含这个 index 的 shard 的 node 上去,那么这个 node 就是一个 coordinate node ,那么这个 coordinate node 就会把检索请求转发到 index 的三个 shard 所在的 node 上去

在刚刚假设的前提下,要检索 60000 条数据的 第 1000 页,而60000 条数据还是分布在3个 node 上。实际上在检索的时候,每个shard 都要将自己内部的20000 条数据的 第 10001 ~~ 10010 条数据拿出来。不是10 条,而是10010 条数据。三个shard 每个都要返回10010条数据给coordinate node ,coordinate node 会收到共 30030条数据,然后在这些数据中进行排序,_score,相关度分数,然后取到排位最高的10条数据,也就是我们需要的 第 1000 页的 10 条数据给用户。

在检索这个过程中 coordinate node 会保存大量的数据,还要进行大数据量的排序,排序之后,再取出对应那一页,所以这个过程中,耗费的网络带宽,内存,cpu,所以 deep paging 的性能问题 我们应该尽量避免这种操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值