«

Elasticsearch中的三种分页策略深度解析:原理、使用及对比

俞事 发布于 阅读:619


1. From/Size分页
原理

使用

GET /index/_search  
{  
  "from": 0,  
  "size": 10,  
  "query": { "match_all": {} }  
}  

限制


2. Scroll分页
原理

使用

# 初始化Scroll  
GET /index/_search?scroll=1m  
{  
  "size": 100,  
  "query": { "match_all": {} }  
}  

# 后续请求  
GET _search/scroll  
{  
  "scroll": "1m",  
  "scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAA..."  
}  

限制


3. Search After分页
原理

使用

# 首次查询  
GET /index/_search  
{  
  "size": 10,  
  "query": { "match_all": {} },  
  "sort": [  
    {"timestamp": "desc"},  
    {"_id": "asc"}  // 确保排序唯一性  
  ]  
}  

# 后续查询(使用上一页最后一条的排序值)  
GET /index/_search  
{  
  "size": 10,  
  "query": { "match_all": {} },  
  "sort": [  
    {"timestamp": "desc"},  
    {"_id": "asc"}  
  ],  
  "search_after": [1640995200000, "abc123"]  
}  

限制


对比总结 维度 From/Size Scroll Search After
性能 低效(深度分页时) 高效(大数据量批处理) 高效(实时深度分页)
实时性 实时 非实时(快照) 实时
内存占用 高(协调节点聚合) 高(上下文保留) 低(无上下文)
适用场景 小数据量简单分页 全量数据导出 大数据量深度分页
跳页支持 支持 不支持 不支持

取消
微信二维码
微信二维码
支付宝二维码