工作纪实38-ES分页数据问题

之前分页查询有接ES,随着系统使用时间数据量不断增加,会有如下报错。关键信息就是 Result window is too large, from + size must be less than or equal to: 10000 but was 100001

当索引非常非常大(千万或亿),是无法按照from + size做深分页的,因为分页越深则越容易OOM,即便不OOM,也是很消耗CPU和内存资源的。官方在后2.x版本中已增加限定 index.max_result_window:10000作为保护措施,即默认 from + size 不能超过1万。(from表示从第几行开始,size表示查询多少条数据,from默认为0,size默认为10)

解决方案:

方案一、接口层面限制查询到10000条,业务端给提示让使用方继续筛选数据

java 复制代码
Integer queryTotal = pageQuery.getPageIndex() * pageQuery.getPageSize();
if (queryTotal > 10000) {
	throw new BusinessException(String.format("只能查询前[%s]条数据, 建议缩小查询范围", 10000));
}

方案二、使用其他的深分页策略:scroll 或者scroll after【缺点是不能随意上下翻页,根据场景选择】

方案三:创建索引时设置【不推荐】

yaml 复制代码
"settings":{
	"index":{
		"max_result_window":1000000
   } 
}
相关推荐
KINGSEA_1688 分钟前
AgentScope Java 2.0 架构解析
java
l1t14 分钟前
duckdb 1.6dev新增的.manual命令
开发语言·数据库
辉灰笔记31 分钟前
第一篇:MySQL8.0生产备份实战|XtraBackup全自动全量+增量备份(钉钉告警+异地Binlog归档)
数据库·mysql·钉钉·运维开发
折哥的程序人生 · 物流技术专研34 分钟前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
ikun_文40 分钟前
Java里面异常Exception体系知识点
java
不负岁月无痕41 分钟前
STL -- C++ 红黑树封装 Map 和 Set
java·c语言·开发语言·c++·面试
山峰哥44 分钟前
‌Explain实战:打开数据库执行计划的黑盒‌
大数据·服务器·数据库·sql·深度优先·宽度优先
小园子的小菜1 小时前
Java核心基础:反射与泛型底层原理及实战用法详解
java·开发语言
淘源码A1 小时前
多院区集团化云PACS系统源码,原生兼容国产软硬件环境
java·云计算·源码·saas·pacs·医学影像系统
何中应1 小时前
主流 OpenJDK 发行版下载安装
java·oracle·jdk·openjdk