V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
V2EX  ›  Elasticsearch

es 中分页是怎么使用到分片的呢

  •  1
     
  •   rqxiao · 2021-02-20 18:06:32 +08:00 · 2082 次点击
    这是一个创建于 1370 天前的主题,其中的信息可能已经有所发展或是发生改变。

    官网有写到

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

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

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

    为啥说 查询 10001-10010 需要 每个分片不得不产生前 10010 个结果?

    3 条回复    2021-02-20 18:48:35 +08:00
    Olament
        1
    Olament  
       2021-02-20 18:18:39 +08:00   ❤️ 1
    我们简化一下这个问题,我现在有 5 个数字的集合,我要找出这 5 个集合中第 10 大的数字,那么我是不是要找到每个集合前 10 大的数字然后汇总产生第 10 大的数字。
    Vegetable
        2
    Vegetable  
       2021-02-20 18:34:12 +08:00   ❤️ 1
    因为最靠前的 10010 个结果,可能集中在某一个节点上
    fucUup
        3
    fucUup  
       2021-02-20 18:48:35 +08:00
    mapreduce 会遇到一样的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3299 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 12:00 · PVG 20:00 · LAX 04:00 · JFK 07:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.