image.png

## Elasticsearch 分页查询
### From + size
- 优点
  - 支持随机翻页
- 缺点
  - 受制于max_result_window,不能无限制翻页
  - 深度翻页越慢
- 适用场景
  - 小型数据集
  - 主流PC搜索引擎(Top数据随机分页)

### search_after
- 优点
  - 不受max_result_window限制,可无限后翻
- 缺点
  - 仅支持后翻,不支持随机翻页
- 适用场景
  - 类似今日头条后翻页(无随机翻页)的场景

### scroll
- 优点
  - 支持全量遍历
  - 不受max_result_window限制
- 缺点
  - 响应非实时
  - 内存占用高
- 适用场景
  - 全量/大数据量遍历(非分页查询)
- 官方说明
  - 不再建议用于深度分页

### 官方推荐方案:PIT + search_after
- 官方定位
  - 超过10,000+结果分页检索的推荐方案
- 核心组件
  - PIT(Point In Time)
    - 作用:创建索引时间点快照,保障数据一致性
    - 优势:仅记录索引状态,内存占用低
  - search_after
    - 作用:基于排序值的游标分页
    - 优势:性能不受分页深度影响
- 与scroll对比
  - 官方态度:推荐 vs 不再推荐
  - 内存占用:低 vs 高
  - 状态维护:无状态 vs 有状态
  - 实时性:更好 vs 差
- 使用步骤
  1. 创建PIT快照(设置keep_alive)
  2. 首次搜索(用pit_id + 排序规则)
  3. 后续分页(传递search_after排序值)
  4. 关闭PIT释放资源
- 最佳实践
  - 排序字段含唯一值(如时间戳+_id)
  - 批次大小1000-5000条
  - 禁用track_total_hits提升性能
  - 设置合理的PIT keep_alive时间