【Elasticsearch】search_after不支持随机到哪一页,只能用于上一页或下一页的场景

article/2025/6/6 2:36:12

`search_after` 确实不支持随机访问(即直接跳到任意一页),因此在前端需要随机跳转到某一页的场景中,使用 `search_after` 是不合适的。这种情况下,更适合使用 `from` 和 `size` 来实现分页。

 

为什么 `search_after` 不支持随机访问

`search_after` 的工作原理是基于排序字段的值,从上一页的最后一个结果之后继续查找下一页的结果。它依赖于结果的顺序性,因此只能顺序分页。如果需要跳转到任意一页,`search_after` 无法直接实现,因为它无法像 `from` 和 `size` 那样通过偏移量直接定位到目标页。

 

前端分页场景的适用性

 

1. 随机访问分页(适合 `from` 和 `size`)

如果前端允许用户直接跳转到任意一页(例如用户可以直接输入页码,或者点击“第 100 页”这样的按钮),那么应该使用 `from` 和 `size`。这种方式可以方便地通过偏移量(`from`)直接定位到目标页。

 

- 优点:

  - 支持随机访问,用户可以自由跳转到任意一页。

  - 实现简单,前端和后端的逻辑都比较直观。

- 缺点:

  - 当分页深度较大时(例如 `from` 值很大),性能会显著下降,因为 Elasticsearch 需要加载和丢弃大量中间结果。

 

2. 顺序分页(适合 `search_after`)

如果前端的分页逻辑是顺序的(例如用户只能通过“下一页”或“上一页”按钮逐步浏览),那么可以使用 `search_after`。这种方式在深度分页时性能更好,因为它不需要加载和丢弃大量中间结果。

 

- 优点:

  - 性能高效,适合深度分页。

  - 资源占用低,对集群的压力小。

- 缺点:

  - 不支持随机访问,用户不能直接跳转到任意一页。

  - 实现相对复杂,需要正确处理排序字段和排序值的传递。

 

前端分页的实现建议

如果你需要在前端实现分页功能,可以根据具体需求选择合适的分页方式:

 

- 如果需要支持随机访问(用户可以跳转到任意一页):

  - 使用 `from` 和 `size`。

  - 在后端查询时,根据前端传入的页码计算 `from` 的值(`from = (page - 1) * size`)。

  - 示例:

    

```json

    GET /my_index/_search

    {

      "from": 990, // 假设每页 10 条,跳转到第 100 页

      "size": 10,

      "query": {

        "match_all": {}

      }

    }

    ```

 

- 如果只需要顺序分页(用户只能通过“下一页”或“上一页”浏览):

  - 使用 `search_after`。

  - 在后端查询时,根据上一页的最后一个结果的排序值,设置 `search_after` 参数。

  - 示例:

    

```json

    GET /my_index/_search

    {

      "size": 10,

      "query": {

        "match_all": {}

      },

      "sort": [

        { "_doc": "asc" }

      ],

      "search_after": ["12345"] // 假设上一页的最后一个结果的 _doc 值为 12345

    }

    ```

 

总结

- 如果前端需要支持随机访问分页(用户可以跳转到任意一页),建议使用 `from` 和 `size`。

- 如果前端只需要顺序分页(用户只能通过“下一页”或“上一页”浏览),并且需要处理大量数据,建议使用 `search_after`。

 

根据你的描述,如果前端允许用户随意点击某一页,那么确实不适合使用 `search_after`,而应该使用 `from` 和 `size` 来实现分页功能。


http://www.hkcw.cn/article/OIudOMmHHQ.shtml

相关文章

大模型的外围关键技术

最简易前端:Gradio 基本介绍 Gradio 是一个用于快速创建可分享的机器学习模型界面的开源 Python 库。通过 Gradio,开发者能够轻松地为他们的模型创建前端界面,从而使非技术用户也可以通过简单的网页界面与这些模型进行交互。 Gradio 的一些…

electron定时任务,打印内存占用情况

// 监听更新 function winUpdate(){// 每次执行完后重新设置定时器try {// 获取当前时间并格式化为易读的字符串const now new Date();const timeString now.toLocaleString();console.log(当前时间: ${timeString});// 记录内存使用情况(可选)const m…

建筑工程施工进度智能编排系统 (SCS-BIM)

建筑工程施工进度智能编排 (SCS-BIM) 源码可见于:https://github.com/Asionm/SCS-BIM 项目简介 本项目是一个面向建筑工程的施工进度智能编制平台,用户只需上传一份标准 IFC 建筑信息模型文件,系统将自动完成以下任务: 解析模…

小红薯商品搜索详情分析与实现

前言 小红书作为国内知名的社交电商平台,拥有丰富的商品数据和用户评价信息。对于数据分析师、产品经理或电商从业者来说,能够获取小红书的商品数据具有重要的商业价值。本文将详细介绍如何通过逆向工程实现小红书商品搜索API的调用。 免责声明&#xf…

国标GB28181设备管理软件EasyGBS视频平台筑牢文物保护安全防线创新方案

一、方案背景​ 文物作为人类文明的珍贵载体,具有不可再生性。当前,盗窃破坏、游客不文明行为及自然侵蚀威胁文物安全,传统保护手段存在响应滞后、覆盖不全等局限。随着5G与信息技术发展,基于GB28181协议的EasyGBS视频云平台&…

使用 Python + ExecJS 获取网易云音乐歌曲歌词

🎵 使用 Python ExecJS 获取网易云音乐歌曲歌词 在本篇博客中,我们将通过一个完整的 Python 脚本,利用 execjs 模块调用 JavaScript 代码,成功获取网易云音乐的歌曲歌词。整个过程涵盖了加密参数的生成、API 请求发送与歌词提取…

云台式激光甲烷探测器:守护工业安全的“智慧之眼”

在石油化工、天然气场站、城市燃气管网等场景中,甲烷泄漏的早期监测是保障生产安全的核心防线。云台式激光甲烷探测器凭借高精度、无接触、智能化的技术优势,成为工业安全监测领域的革新者。本文将深度解析其技术原理、核心功能及适用场景,助…

基于YOLO-NAS-Pose的无人机象群姿态估计:群体行为分析的突破

【导读】 应对气候变化对非洲象的生存威胁,本研究创新采用无人机航拍结合AI姿态分析技术,突破传统观测局限。团队在肯尼亚桑布鲁保护区对比测试DeepLabCut与YOLO-NAS-Pose两种模型,首次将后者引入野生动物研究。通过检测象群头部、脊柱等关键…

CppCon 2014 学习:Anatomy of a Smart Pointer

智能指针(smart pointer)可以这样解释: 它是一个指针的容器——内部保存了一个普通指针,并且可以在需要时把指针交给你使用。它支持RAII(资源获取即初始化),也就是说资源(比如内存&…

GNhao,国外云手机号智能选择与应用解析!

GNhao,国外云手机号智能选择与应用解析! 在数字时代,国外云手机号成为跨境沟通的关键。GNhao凭借其稳定的国外云手机号服务,满足了用户多样需求,提升了通讯效率。国外云手机号广泛应用于海外注册、跨境营销和社交&…

AcWing 843:n-皇后问题 ← dfs

【题目来源】 https://www.acwing.com/problem/content/845/ https://www.lanqiao.cn/problems/1508/learning/ https://www.luogu.com.cn/problem/P1219 【题目描述】 n 皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任…

风机巡检方案艰难之路

2025年是“双碳”目标提出后首个五年计划收关节点,政策端通过强化大基地建设与海风开发确保既定风电目标落地。根据《2025年能源工作指导意见》,2025年将通过加速第二批/第三批大基地及海上风电建设保障目标兑现。据联储证券预计,2025年全年陆…

Java-redis实现限时在线秒杀功能

1.使用redisson pom文件添加redisson <!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.4</version></dependency> 2.mysql数据库表设…

龙虎榜——20250603

上证指数放量收阳线&#xff0c;阳包阴&#xff0c;量能超过5天均量&#xff0c;个股涨多跌少&#xff0c;行情有所回暖。 深证指数缩量收阳线&#xff0c;再次回打支撑位。 2025年6月3日龙虎榜行业方向分析 1. 医药&#xff08;创新药原料药出口&#xff09; 代表标的&…

永磁同步电机无速度算法--互补滑模观测器

一、原理介绍 采用了互补滑模变结构观测器&#xff0c;滑模面选择了广义滑模面和互补滑模面相结合的设计&#xff0c;这样可以有效地降低系统的跟踪误差&#xff0c;提高系统的跟踪性能&#xff0c;切换控制率选择饱和函数&#xff0c;抑制了传统SMC 的抖振现象。 二、仿真模型…

2025年AIR SCI1区TOP,多策略增强蜣螂算法MDBO+实际工程问题,深度解析+性能实测

目录 1.摘要2.蜣螂优化算法DBO原理3.改进策略4.结果展示5.参考文献6.代码获取7..算法辅导应用定制读者交流 1.摘要 蜣螂优化算法&#xff08;DBO&#xff09;作为一种创新元启发式算法&#xff0c;虽具备良好的数值优化能力&#xff0c;但存在收敛速度慢且易陷入局部最优的问题…

【notepad++】如何设置notepad++背景颜色?

如何设置notepad背景颜色&#xff1f; 设置--语言格式设置 勾选使用全局背景色 例如选择护眼色---80&#xff0c;97&#xff0c;205&#xff1b;

Gitee Wiki:重塑关键领域软件研发的知识管理范式

在数字化转型浪潮席卷全球的当下&#xff0c;关键领域软件研发正面临前所未有的知识管理挑战。传统文档管理模式的局限性日益凸显&#xff0c;知识传承的断层问题愈发严重&#xff0c;团队协作效率的瓶颈亟待突破。Gitee Wiki作为新一代知识管理平台&#xff0c;正在通过技术创…

电源防反接保护电路分析

电路&#xff1a; 这是一个电源输入防反接的电路&#xff0c;通过NMOS来实现。 1、正常接入电源。 正常接入电源的时候&#xff0c;VCC12V&#xff0c;这时候&#xff0c;电流通过R1、R2和NMOS的体二极管D形成一个回路&#xff0c;此时NMOS还未导通。 通过计算可以得到Vs0.7V&a…

焊缝缺陷焊接缺陷识别分割数据集labelme格式5543张4类别

数据集中有超过一半为增强图片&#xff0c;请认真观察图片预览 数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;5543 标注数量(json文件个数)&#xff1a;5543 标注类别数&#xff1a;4…