当前位置: 首页 > news >正文

Elasticsearch 深分页限制与解决方案

最近在准备面试,正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解,以及高频业务场景的应对策略系统梳理一遍,既能加深记忆,也能让知识体系更扎实,供大家参考,欢迎讨论。

在项目中遇到一个问题:之前同事在导出所有 IM 消息时,直接用 分页查询(from + size) 拉全量数据,当数据加起来超过1万条后,Elasticsearch 报错:

Result window is too large, from + size must be less than or equal to: [10000] but was [11000].
See the scroll api for a more efficient way to request large data sets.

这就是 ES 默认的 深分页限制 导致的。

一、问题原因

Elasticsearch 默认的 index.max_result_window 设置为 10000。

查询时,如果 from + size > 10000,就会报错。注意是 from + size 一起不能超过10000条。

默认分页只适合小数据量查询,不适合一次性拉取所有数据。

二、解决方案

1. 临时调整 index.max_result_window

通过修改索引配置提高限制,例如:

PUT 索引名称/_settings?preserve_existing=true
{
“index.max_result_window”: “50000”
}

⚠️ 这种方式会增加 ES 的内存和 CPU 消耗,不建议无限放大。

2. 调整java代码使用 Scroll API

适合批量拉取大量数据,特点:

返回的是快照数据,不随实时更新。

用完要清理 scroll 上下文。

更适合离线导出、批处理。

三、经验总结

分页查询(from+size)只适合小数据量场景,不适合全量查询。

大数据导出 → Scroll API

实时分页展示 → Search After

特殊情况 → 调整 index.max_result_window(需谨慎)。

✅ 这次踩坑,就是因为用分页直接查全量数据,超过了 ES 的默认限制。后续我们改用 Scroll API,顺利解决。

http://www.dtcms.com/a/362839.html

相关文章:

  • Flink RuntimeContext和FunctionContext:状态计算的核心桥梁
  • flink中的窗口的介绍
  • uni-app iOS 应用版本迭代与上架实践 持续更新的高效流程
  • Windows远程连接:SSH+RDP+Server
  • 阿里云携手MiniMax构建云原生数仓最佳实践:大模型时代的 Data + AI 数据处理平台
  • 【Python3教程】Python3高级篇之XML解析
  • 消息存储机制-索引文件及页缓存
  • uniapp中输入金额的过滤(只允许输入数字和小数点)
  • Redis分层缓存
  • kukekey在线搭建k8sV1.30.4版本
  • VMWare ubuntu24.04安装(安装ubuntu安装)
  • InnoDB存储引擎-逻辑存储结构
  • Qwen3-30B-A3B 模型解析
  • 【LeetCode牛客数据结构】单链表的应用
  • C语言(长期更新)第12讲:指针二详解
  • 【嵌入式电机控制#进阶6】三段启动法
  • 怎么为服务器设置或重置服务器密码?
  • 【Vue2 ✨】Vue2 入门之旅(九):Vue Router 入门
  • JetBrains 2025 全家桶 11合1 Windows直装(含 IDEA PyCharm、WebStorm、DataSpell、DataGrip等
  • [密码学实战]智能密码钥匙SKF库软实现(四十六)
  • LabVIEW应急柴油发电机组诊断装置
  • LabVIEW振动信号积分处理
  • 【设计模式】通俗讲解设计模式的七大原则
  • 【设计模式】从游戏角度开始了解设计模式 --- 创建型模式(一)
  • Python OpenCV图像处理与深度学习:Python OpenCV性能优化与高效图像处理
  • VGG改进(7):基于Spatial Attention的性能优化
  • 从“叠加”到“重叠”:Overlay 与 Overlap 双引擎驱动技术性能优化
  • Spring MVC + JSP 项目的配置流程,适合传统 Java Web 项目开发
  • 【MySQL】初识数据库基础
  • RAG-检索进阶