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

2021-02-20 18:06:32 +08:00
 rqxiao

官网有写到

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

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

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

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

2113 次点击
所在节点    Elasticsearch
3 条回复
Olament
2021-02-20 18:18:39 +08:00
我们简化一下这个问题,我现在有 5 个数字的集合,我要找出这 5 个集合中第 10 大的数字,那么我是不是要找到每个集合前 10 大的数字然后汇总产生第 10 大的数字。
Vegetable
2021-02-20 18:34:12 +08:00
因为最靠前的 10010 个结果,可能集中在某一个节点上
fucUup
2021-02-20 18:48:35 +08:00
mapreduce 会遇到一样的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX