tongchenkeji 发表于:2023-3-18 19:07:090次点击 已关注取消关注 关注 私信 请问你们对es做分页处理的时候,使用Search After手动维护页码的sort吗?[阿里云检索分析服务 Elasticsearch版] 暂停朗读为您朗读 请问你们对es做分页处理的时候,使用Search After手动维护页码的sort吗? 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 检索分析服务 Elasticsearch版# 检索分析服务 Elasticsearch版775
凌云CloudAM 2023-11-27 19:11:06 1 是的,这是Elasticsearch官方推荐的做法。使用Search After来进行分页处理相较于传统的基于from/size的分页方式,具有更好的性能和可扩展性,尤其是当数据量较大的时候。 在使用 Search After 进行分页时,需要将上一页的最后一个排序字段值作为参数传递给下一页的查询,作为下一页的起始点。同时,需要确保每一页的大小是一致的,否则可能会出现数据漏查或重复的问题。 使用 Search After 需要一定的编程能力和对 Elasticsearch 查询语法的熟悉程度。同时,也有一定的局限性,比如无法跳页、无法直接跳到某一页等问题。
穿过生命散发芬芳AM 2023-11-27 19:11:06 2 为了应对深度分页的情况,ES 推荐使用 SearchAfter 的方式,来实现数据的深度翻页检索。 在具体实现上,通过动态指针的技术。在第一次使用 search api 查询时,附带一个 sort 参数,其中 sort 的值必须唯一,可以用 _id 作为排序参数。 Search-after 也有一些问题: 首先就是不支持跳页的情况。 如果需求上一定需要跳页时,只能通过 from 或者 size 的方式。同时为了避免深度分页的问题,一般可以采用限制页面数量的方式。在确定 size 后,设置一个最大的分页值。在查询时,分页数不允许超过该值。 其次,随着翻页深度的增加,查询的效率也会有所降低,但不会导致 OOM,算是可以完成深度查询的任务。原因在于,虽然说通过排序字段,可以很好的定位出下一次翻页的开始位置。但在每次请求时,从头扫描该字段,找到该字段的位置。页数越深,找到该位置的时间也就越长。
是的,这是Elasticsearch官方推荐的做法。使用Search After来进行分页处理相较于传统的基于from/size的分页方式,具有更好的性能和可扩展性,尤其是当数据量较大的时候。
在使用 Search After 进行分页时,需要将上一页的最后一个排序字段值作为参数传递给下一页的查询,作为下一页的起始点。同时,需要确保每一页的大小是一致的,否则可能会出现数据漏查或重复的问题。
使用 Search After 需要一定的编程能力和对 Elasticsearch 查询语法的熟悉程度。同时,也有一定的局限性,比如无法跳页、无法直接跳到某一页等问题。
为了应对深度分页的情况,ES 推荐使用 SearchAfter 的方式,来实现数据的深度翻页检索。
在具体实现上,通过动态指针的技术。在第一次使用 search api 查询时,附带一个 sort 参数,其中 sort 的值必须唯一,可以用 _id 作为排序参数。
Search-after 也有一些问题:
首先就是不支持跳页的情况。
如果需求上一定需要跳页时,只能通过 from 或者 size 的方式。同时为了避免深度分页的问题,一般可以采用限制页面数量的方式。在确定 size 后,设置一个最大的分页值。在查询时,分页数不允许超过该值。
其次,随着翻页深度的增加,查询的效率也会有所降低,但不会导致 OOM,算是可以完成深度查询的任务。原因在于,虽然说通过排序字段,可以很好的定位出下一次翻页的开始位置。但在每次请求时,从头扫描该字段,找到该字段的位置。页数越深,找到该位置的时间也就越长。