一现象:
es数据分页查询前端提示系统异常,后端报错日志
二根本原因:
默认情况下,Elasticsearch 限制了 from + size
参数的组合不能超过 10,000 条记录,用于防止查询大数据集时对系统资源的过度消耗
三解决办法:
方法一:修改索引级别的 index.max_result_window
设置来增加允许返回结果窗口的大小
方法二:使用 Scroll API:Scroll API 是 Elasticsearch 提供的一种更高效地请求大数据集的方式。通过 Scroll API,您可以持续获取大量数据而无需一次性返回所有数据
方法三:使用search_after API
三种分页优缺点对比
分页方式 | 优点 | 缺点 | 场景 |
---|---|---|---|
from + size | 灵活性好,实现简单 | 深度分页问题 | 数据量比较小,能容忍深度分页问题 |
scroll | 解决了深度分页问题 | 无法反应数据的实时性(快照版本)维护成本高,需要维护一个 scroll_id,滚动上下文开销很大 | 海量数据的导出需要查询海量结果集的数据 |
search_after | 不存在深度分页问题能够反映数据的实时变更 | 实现复杂,需要有一个全局唯一的字段连续分页的实现会比较复杂,因为每一次查询都需要上次查询的结果 | 海量数据的分页 |