开发者社区 > 大数据与机器学习 > 检索分析服务 Elasticsearch版 > 正文

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

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

展开
收起
真的很搞笑 2023-03-18 19:07:09 642 0
2 条回答
写回答
取消 提交回答
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    是的,这是Elasticsearch官方推荐的做法。使用Search After来进行分页处理相较于传统的基于from/size的分页方式,具有更好的性能和可扩展性,尤其是当数据量较大的时候。

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

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

    2023-03-19 14:35:48
    赞同 展开评论 打赏
  • 为了应对深度分页的情况,ES 推荐使用 SearchAfter 的方式,来实现数据的深度翻页检索。

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

    Search-after 也有一些问题:

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

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

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

    2023-03-19 08:05:13
    赞同 展开评论 打赏

阿里云检索分析服务Elasticsearch版兼容开源ELK功能,免运维全托管,提升企业数据检索与运维分析能力。

热门讨论

热门文章

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载