ElasticSearch 分页检索

ElasticSearch的多索引和多类别里说到我们在集群中有14个文档匹配我们的(空)搜索语句。单数仅仅有10个文档在hits数组中。我们怎样看到其它文档?

和SQL使用LIMITkeyword返回仅仅有一页的结果一样。Elasticsearch接受fromsize參数:

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个结果然后返回它们给请求节点(requesting node),它再排序这全部的50个结果以选出顶端的10个结果。

如今如果我们请求第1000页——结果10001到10010。工作方式都同样。不同的是每一个分片都必须产生顶端的10010个结果。然后请求节点排序这50050个结果并丢弃50040个!

你能够看到在分布式系统中,排序结果的花费随着分页的深入而成倍增长。这也是为什么网络搜索引擎中不论什么语句不能返回多于1000个结果的原因。

posted @ 2017-05-08 09:29  yangykaifa  阅读(301)  评论(1编辑  收藏  举报