尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何解决ES深度分页
在Elasticsearch中深度分页指的是请求靠后的页码如第1000页每页20条时性能急剧下降甚至内存溢出的问题。面试官期望你理解ES分页原理并给出合理的解决方案。一、为什么深度分页慢ES默认的分页通过from size实现例如请求第1000页每页20条from 19980, size 20。协调节点会向所有分片发送查询每个分片必须返回from size条文档即19980条给协调节点。协调节点对收到的分片数 × (fromsize)条文档进行全局排序截取from到fromsize的文档返回。代价随着from增大每个分片需要返回的数据量线性增长网络IO、内存、CPU开销剧增。二、解决方案1. 避免深度分页业务折衷限制用户只能查看前100页或前500页。很多搜索引擎也这样设计改用“滚动加载”或“加载更多”的方式而不是页码跳转。2.search_after——推荐用于实时深度分页原理使用上一页最后一条文档的排序值如_id或时间戳作为下一次查询的起点。步骤第一次查询正常sort和size并获取最后一条文档的排序值。下一页在请求中加上search_after: [last_sort_value]。优点无深度分页性能问题每次查询只取size条。支持实时数据可以看到新插入的文档。缺点必须指定排序字段且最好是唯一值如_id。不能随机跳页只能顺序翻页。3.scroll—— 用于批量导出或非实时遍历原理执行scroll查询时ES会生成当前时间点的快照并返回一个scroll_id后续通过该ID批量拉取数据。用法GET /order/_search?scroll1m { size: 1000 }然后用scroll_id持续拉取。优点适合处理大量数据如全量导出。每次请求开销较小。缺点占用内存资源保留搜索上下文。不适用于实时分页数据是快照不能反映后续变更。scroll结果顺序可能不一致依赖排序。4. 使用point in time(PIT) search_after(ES 7.10)这是目前官方推荐的深分页实时方案先创建一个 PIT代替索引名固定查询时间点。使用search_after基于该 PIT 进行分页既能避免深度分页问题又能保证数据一致性。三、各方案对比方案实时性随机跳页性能深度适用场景from/size实时✅极差深度大时不可用前几百页数据量小search_after实时❌ 只能下一页好Web UI 滚动加载scroll快照❌好但占用资源全量导出、批处理PIT search_after快照或实时❌好兼顾一致性与深度四、实际项目中的设计原则默认查询使用from/size限制最大from值如 10000超过则返回错误或拒绝。用户滚动加载改用search_after前端记录最后一条文档的排序值。导出全量数据使用scroll并设置合理的scroll超时时间如 10 分钟用完及时清除scroll_id。业务监控检测到深分页请求from过大时打印警告或限流。
RELATED

相关推荐

TUI vs 原生UI:从命令行到图形界面的技术选型与实战指南

TUI vs 原生UI:从命令行到图形界面的技术选型与实战指南

大家好,我是专注于分享开发实战与工程经验的博主。在开发命令行工具时,我们常常面临一个选择:是打造一个功能强大但交互复杂的 TUI(文本用户界面),还是拥抱现代的原生图形界面?最近,…

📅 2026/9/21 5:04:40
TUI vs GUI:从命令行界面到原生图形界面的技术选型与实践指南

TUI vs GUI:从命令行界面到原生图形界面的技术选型与实践指南

这次我们来看一个在开发者社区引发讨论的观点:“别再写 TUI 了”。这个观点由知名安全研究员 Thomas Ptacek 提出,核心是呼吁开发者放弃为现代工具编写传统的命令行文本用户界面,转而拥抱原生图形用户界面。这并非一个具体的开源项目&#xf…

📅 2026/10/7 12:56:06
AI智能体工程化实战:基于LangGraph构建多智能体协作系统

AI智能体工程化实战:基于LangGraph构建多智能体协作系统

大家好,我是专注于技术实战分享的博主。在探索AI工程化落地的过程中,我们常常面临一个核心挑战:如何将前沿的AI能力,特别是智能体(Agents),有效地整合到现有的软件工程流程中?这不仅…

📅 2026/9/9 2:06:33
MORE NEWS

更多资讯

📰

超级鹰版免登录实战(一):Chaojiying.py + DrissionPage 实现【古诗文网图片验证码自动识别免登录】保姆级实战教程

一、 前置回顾(承接上篇文章)承接上篇:超级鹰账号注册、充值、获取 softid 💡 核心重点: 1. 使用现成 Chaojiying_Client 超级鹰打码 2. DrissionPage 操控浏览器,元素截图提取验证码 3. 题型编码 1004&…

📰

专其利 AI V3.4.0 更新说明

专其利 AI V3.4.0 升级说明 AI 对话,更懂你在写什么 输入框支持 快捷引用——直接关联当前专利、上传文件或图片,AI 自动理解上下文,无需反复粘贴内容图片直接上传:支持拖拽或粘贴图片,AI 自动识别图中技术内容并纳入…

📰

RVC 开源音色转换实战:Retrieval-based Voice Conversion 与 WebUI 从安装到调参

RVC 开源音色转换实战:Retrieval-based Voice Conversion 与 WebUI 从安装到调参 RVC(Retrieval-based Voice Conversion,社区常用实现与 WebUI 多托管于 GitHub 相关仓库,检索关键词 RVC-Project / Retrieval-based-Voice-Conver…

📰

深度学习毕业设计选题推荐:基于YOLO11的交通标志检测系统设计与实现(Python+Django+Vue3+对接deepseek)

🔥作者:雨晨源码🔥 💖简介:java、微信小程序、安卓;定制开发,远程调试 代码讲解,文档指导,ppt制作💖 精彩专栏推荐订阅:在下方专栏👇&…

📰

听故事学语言 · 数据结构篇 · 第一章 当千万条数据肩并肩

本书是《听故事学语言》第二册。零基础的建议从序章三读起。 听故事学语言 数据结构篇 第一章 当千万条数据肩并肩 本章讲述:数据是什么,结构是什么,一张演出单如何立起来,第一场舞如何跳;以及九年前两份手写程序,如何在九年后当庭对质。第一册结尾那场集体舞,这一册…

📰

你的迭代器为何总在“第二次”失灵?——Python iter() 与 next() 的协议真相与完全驾驭手册

你的迭代器为何总在“第二次”失灵?——Python iter() 与 next() 的协议真相与完全驾驭手册 在 Python 中,for 循环几乎无处不在,但支撑它运转的底层机制——iter() 和 next()——却常常被开发者忽略。你可能已经习惯写 for x in data:&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬