请问你们对es做分页处理的时候,使用Search After手动维护页码的sort吗?[阿里云检索分析服务 Elasticsearch版]

请问你们对es做分页处理的时候,使用Search After手动维护页码的sort吗?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 是的,这是Elasticsearch官方推荐的做法。使用Search After来进行分页处理相较于传统的基于from/size的分页方式,具有更好的性能和可扩展性,尤其是当数据量较大的时候。

    在使用 Search After 进行分页时,需要将上一页的最后一个排序字段值作为参数传递给下一页的查询,作为下一页的起始点。同时,需要确保每一页的大小是一致的,否则可能会出现数据漏查或重复的问题。

    使用 Search After 需要一定的编程能力和对 Elasticsearch 查询语法的熟悉程度。同时,也有一定的局限性,比如无法跳页、无法直接跳到某一页等问题。

  2. 为了应对深度分页的情况,ES 推荐使用 SearchAfter 的方式,来实现数据的深度翻页检索。

    在具体实现上,通过动态指针的技术。在第一次使用 search api 查询时,附带一个 sort 参数,其中 sort 的值必须唯一,可以用 _id 作为排序参数。

    Search-after 也有一些问题:

    • 首先就是不支持跳页的情况。

    • 如果需求上一定需要跳页时,只能通过 from 或者 size 的方式。同时为了避免深度分页的问题,一般可以采用限制页面数量的方式。在确定 size 后,设置一个最大的分页值。在查询时,分页数不允许超过该值。

    • 其次,随着翻页深度的增加,查询的效率也会有所降低,但不会导致 OOM,算是可以完成深度查询的任务。原因在于,虽然说通过排序字段,可以很好的定位出下一次翻页的开始位置。但在每次请求时,从头扫描该字段,找到该字段的位置。页数越深,找到该位置的时间也就越长。