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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ov7725摄像头人脸识别_ov7725摄像头

    ov7725摄像头人脸识别_ov7725摄像头OV7725摄像头软件实现简单的二值化处理项目使用的摄像头型号:​ 正点原子OV7725摄像头模块,带FIFO的摄像头模块。图像二值化化的个人见解:​ 常见的图片格式:​ 黑白图片、灰度图片、彩色图片。不同的图片的格式类型主要的不同点在每个像素点需要几位的二位数来表示。黑白图片每个像素不是0就是1,0代表黑颜色,1代表白颜色。灰度图像每个像素需要一个字节表示(8位二进制)每个像素可以量化…

    2025年11月29日
    7
  • STM32的IWDG(独立看门狗)详细用法

    STM32的IWDG(独立看门狗)详细用法文章出处:https://www.cnblogs.com/Liu-Jing/p/7243029.html章参考资料:《STM32F4XX中文参考手册》IWDG章节。1、IWDG简介:  STM32有两个看门狗,一个是独立看门狗另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬,本章我们主要分析独立看门狗的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12位的递减计…

    2022年6月14日
    55
  • Golang开发环境搭建(Windows)[通俗易懂]

    Golang开发环境搭建(Windows)[通俗易懂]golang下载地址:Downloads-TheGoProgrammingLanguage1)下载安装包安装2)环境变量配置:path:C:\Go\bin可执行文件路径加到环境变量path中 GOROOT:go的安装路径。C:\Go,官方包路径根据这个设置自动匹配 GOPATH:goinstall你的子包。有利于gobuild的时间配置集成开发环境1)IntellIJidea:安装go插件搜索不到go,配置管…

    2022年10月7日
    2
  • oracle 11与plsql安装教程

    oracle 11与plsql安装教程1、下载oracle登录oracle官网,下载oracle11标准版,11版本的两个文件都要下载,下载之前先接受许可,地址是https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html。下载完毕后将两个文件解压在一个目录下。2、安装安装过程中会修改注册表,所以先关闭杀…

    2022年6月17日
    43
  • linux iso镜像下载_linux镜像下载网站

    linux iso镜像下载_linux镜像下载网站iso是电脑上光盘镜像(CD Mirror)的存储格式之一因为其是根据ISO-9660有关CD-ROM文件系统标准存储的文件,所以通常在电脑中以后缀.iso命名,俗称iso镜像文件。它形式上只有一个文件,可以真实反映光盘的内容,可由刻录软件或者镜像文件制作工具创建。大陆叫镜像文件,台湾叫映像文件。镜像文件需要专门的虚拟光驱软件,进行读取,完全模拟了读取光盘文件的特性原理既然可以用直接方式向 光盘写入文件,为什么还要如此麻烦地制作一个映像文件呢?要知道制作映像文件同样是个耗费..

    2022年8月9日
    7
  • 详解Linux双网卡绑定之bond0「建议收藏」

    1、什么是bond?  网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。2、实现原理:  网卡工作在混杂(promisc)模式,接收到达网卡的所有数据包,tcpdump工作用的也是混杂模式(promisc),将两块网卡的MAC地址…

    2022年4月1日
    65

发表回复

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

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