elasticsearch size+from 在分布式系统中深度分页查询慢分析

在实际的项目中数据量较大,查询ES进行查询并做分页处理,导致当分页页码过大的时候,查询响应非常的慢,在网上找打这一个分析,记录一下!Tip在 reindex 中解释了如何 能够 有效获取大量的文档。分页在之前的 空搜索 中说明了集群中有 14 个文档匹配了(empty)query 。 但是在 hits 数组中只有 10 个文档。如何才能看到其他的文档?和 SQL 使用 LIM…

大家好,又见面了,我是全栈君。

在实际的项目中数据量较大,查询ES进行查询并做分页处理,导致当分页页码过大的时候,查询响应非常的慢,在网上找打这一个分析,记录一下!

  • Tip

    在 reindex 中解释了如何 能够 有效获取大量的文档。

分页

在之前的 空搜索 中说明了集群中有 14 个文档匹配了(empty)query 。 但是在 hits 数组中只有 10 个文档。如何才能看到其他的文档?

和 SQL 使用 LIMIT 关键字返回单个 page 结果的方法相同,Elasticsearch 接受 from 和 size 参数:

  • size
    显示应该返回的结果数量,默认是 10

  • from
    显示应该跳过的初始结果数量,默认是 0

如果每页展示 5 条结果,可以用下面方式请求得到 1 到 3 页的结果:

GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10

考虑到分页过深以及一次请求太多结果的情况,结果集在返回之前先进行排序。 但请记住一个请求经常跨越多个分片,每个分片都产生自己的排序结果,这些结果需要进行集中排序以保证整体顺序是正确的。

在分布式系统中深度分页

理解为什么深度分页是有问题的,我们可以假设在一个有 5 个主分片的索引中搜索。 当我们请求结果的第一页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点 ,协调节点对 50 个结果排序得到全部结果的前 10 个。

现在假设我们请求第 1000 页—结果从 10001 到 10010 。所有都以相同的方式工作除了每个分片不得不产生前10010个结果以外。 然后协调节点对全部 50050 个结果排序最后丢弃掉这些结果中的 50040 个结果。

可以看到,在分布式系统中,对结果排序的成本随分页的深度成指数上升。这就是 web 搜索引擎对任何查询都不要返回超过 1000 个结果的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121055.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm永久激活码2021【2021.7最新】

    (pycharm永久激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

    2022年3月21日
  • [欧拉回路] hdu 3018 Ant Trip

    [欧拉回路] hdu 3018 Ant Trip

    2021年12月16日
  • GG修改器修改钻石_gg是啥意思

    GG修改器修改钻石_gg是啥意思图就不上了,金钱、钻石和基因等修改,孤单亲测。工具:方法:一.打开GG修改器后选择六号特工二.内存范围:Ca1.钻石修改:进入角色—-选择草帽特工搜索:2500搜索类型:Q全选–修改–更多–增量填1切换下角色你会发现值变了返回搜索找到对应的值修改即可!改成-9999999992.金钱修改:进入关卡打死一个怪后搜索金钱的值搜索类型:Q直接修改即可!改成9999999993.基因修…

    2022年9月4日
  • 保存对话框在哪里设置_vba另存为覆盖不提示

    保存对话框在哪里设置_vba另存为覆盖不提示         SaveFileDialogsaveFileDialog1=newSaveFileDialog();           saveFileDialog1.AddExtension=true;           saveFileDialog1.Filter=”ACCESS2003(*.mdb)|*.mdb|所有文件|*.*”;//文件类型  

    2022年10月8日
  • 单片机入门到高级开挂学习路径(附教程+工具)[通俗易懂]

    单片机入门到高级开挂学习路径(附教程+工具)[通俗易懂]一、先帮大家解答几个问题:1.单片机是什么?答:单片机就是一个微型CPU,把程序烧录芯片里面,通过控制不同的外围电路实现不同产品的功能。2.学单片机编程对数学英语有要求吗?答:数学会基本的加减乘除就行,英语会认单词a-z就行,很多外行人看到代码里一堆英文就头嗡嗡响,其实不然,只有少数语法是固定的,大多数英文都是工程师自己定义的,比如大神你也可以定义成DaShen(中文缩写)。那很多人此时就开始质疑,当初这么辛苦学数学和英语到底是为毛?数学和英语不是单片机开发的门槛,但却决定你以后能达到的高度,

    2022年6月10日
  • RC低通滤波器_滤波器的基本原理

    RC低通滤波器_滤波器的基本原理先来几个不错的资源链接:1.RC滤波器截止频率在线计算器:http://www.eechina.com/tools/rc_filter_cutoff_frequency.html2.详谈一阶RC低通滤波器如何过滤高频噪声(网上不错的一个帖子)http://www.elecfans.com/instrument/631912.html3.【滤波器学习笔记】一阶RC低通滤波(下页截图来源)…

    2022年4月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号