请问你们对es做分页处理的时候,使用Search After手动维护页码的sort吗?
是的,这是Elasticsearch官方推荐的做法。使用Search After来进行分页处理相较于传统的基于from/size的分页方式,具有更好的性能和可扩展性,尤其是当数据量较大的时候。
在使用 Search After 进行分页时,需要将上一页的最后一个排序字段值作为参数传递给下一页的查询,作为下一页的起始点。同时,需要确保每一页的大小是一致的,否则可能会出现数据漏查或重复的问题。
使用 Search After 需要一定的编程能力和对 Elasticsearch 查询语法的熟悉程度。同时,也有一定的局限性,比如无法跳页、无法直接跳到某一页等问题。
为了应对深度分页的情况,ES 推荐使用 SearchAfter 的方式,来实现数据的深度翻页检索。
在具体实现上,通过动态指针的技术。在第一次使用 search api 查询时,附带一个 sort 参数,其中 sort 的值必须唯一,可以用 _id 作为排序参数。
Search-after 也有一些问题:
首先就是不支持跳页的情况。
如果需求上一定需要跳页时,只能通过 from 或者 size 的方式。同时为了避免深度分页的问题,一般可以采用限制页面数量的方式。在确定 size 后,设置一个最大的分页值。在查询时,分页数不允许超过该值。
其次,随着翻页深度的增加,查询的效率也会有所降低,但不会导致 OOM,算是可以完成深度查询的任务。原因在于,虽然说通过排序字段,可以很好的定位出下一次翻页的开始位置。但在每次请求时,从头扫描该字段,找到该字段的位置。页数越深,找到该位置的时间也就越长。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。