Elastic Search之分页展示

类似于mysql中select ……limit n,m,限制返回的结果集条数并分页显示,需要用到elastic search中的分页参数。es提供了三种api方式进行分页:

  • from   size
  • scroll
  • search_after

from/size进行分页

from/size进行时分页是es中最常用的分页方案,from表示开始位置偏移量(从0开始),size表示条数大小,和mysql的 limit n,m 意思是一致的,也可以在es查询中使用分页,默认from和size分别是0、10:

from/size的鸡肋在于深度分页的时候,from+size值不能大于index.max_result_window参数(默认10000),否则会直接返回错误。
 

在数据分片存储的情况下,页数越深,处理的文档就越多,占用的堆内存也就越大,耗时越长,效率越低,因此es有max_result_window参数来限制深度分析。例如你需要"from":"8990","size":"10",在数据分片存储的情况下,你需要在每个分片节点上都获取8990+10=9000条数据,然后再聚合各个分片上的9000条结果取前10条数据再返回,所以效率肯定是个问题,因此es推出了另一个种分页方式: scroll。


scroll

scroll通过生成快照的方式避免深度分页问题,它需要先发起一个scroll search请求,并指明有效期时间和size,然后拿到这个返回的id后,再进行迭代hits.hits即可:

scroll由于数据不是实时性的,所以不能用来做实时搜索,同时官方也建议尽量不要使用复杂的sort条件,使用_doc最高效。


search_after

由于scroll不适用于实时搜索,因此可以用search_after来替代。search_after上一页的最后一条数据来获取下一页的,所以只能进行"下一页"翻页,而不能上一页,也不能进行自由翻页,且为了定位上一页的最后一条数据,需要保证每个文档值的唯一,比如文档的"_id"字段,search_after可以做实时搜索。第一步:进行正常的搜索,但是要指定sort值,且值要唯一:

第二步:使用第一步获取到的sort值进行search_after:


books 上一篇: Elastic Search之Source Filtering(过滤结果中"_source"原始文本显示哪些字段)

books 下一篇: Elastic Search之Java API(文档操作API、Query DSL查询API)

books scroll官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

books search_after官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-after.html

books from/size官方说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值