在 empty
search
above中我们说过,在cluster中进行无任何条件的搜索的时候,符合条件的有14个document,但是在返回的hits数组中只有10个。那么怎么看到其他的document呢。
就像是SQL使用关键字LIMIT进行分页一样,ES也提供了from和size参数实现类似的功能。
size:返回的结果数量,默认10
from:跳过多少记录,默认0
如果你想也每页现实五个数据,前散页的请求应该如下所示:
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10
应该注意在一次请求中分页层次过深或者每页的数据量过大。搜索的结果在返回之前是要存储的。要知道,搜索是跨shard的,每个shard都生成自己的结果集,然后这些集合被整理,用来保证顺序是正确的。
分布式系统中的深度分页
问了理解为什么深度分页是一个问题,首先想象一下我们在一个有5个primary
shard的index进行搜索,当我们请求第一页(前十条),每个shard产生了各自的前十条数据到requesting
node,然后对这50个数据进行排序,并选择前面的十条数据进行返回。现在设想,我们请求第1000页的数据,也就是10001到10010。和上面的方式是一样的,每个shard都要产生各自前面10010个数据,然后requestion
node
对50010进行排序,然后丢弃50040个数据。就这样,在分布式系统中,随着我们搜索的深入,对排序的消耗就随着增长。基于这个原因,web搜索引擎对任何的请求返回超过1000个结果。
原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/pagination.html
时间: 2024-10-16 16:08:40