【Elasticsearch】分页查询_elasticsearch分页查询
在 Elasticsearch 中,分页技术是处理大量搜索结果时的关键功能,尤其在需要优化性能或处理深度分页时。以下是三种主要的分页方法: from/size 、 scroll API 和 search_after ,以及它们的详细对比和适用场景。
 ---
1.`from/size`分页
 原理
 `from/size`是最简单的分页方法,通过指定`from`和`size`参数来跳过指定数量的文档并返回指定数量的结果。
 实现细节
• `from`:跳过的文档数量。
• `size`:每页返回的文档数量。
 示例
 请求:
```json
 GET /index_name/_search
 { 
 \"from\": 0,
 \"size\": 10,
 \"query\": { 
 \"match_all\": {}
 }
 }
 ```
响应:
```json
 { 
 \"took\": 1,
 \"timed_out\": false,
 \"_shards\": { 
 \"total\": 1,
 \"successful\": 1,
 \"skipped\": 0,
 \"failed\": 0
 },
 \"hits\": { 
 \"total\": { 
 \"value\": 100,
 \"relation\": \"eq\"
 },
 \"max_score\": 1.0,
 \"hits\": [
 { 
 \"_index\": \"index_name\",
 \"_type\": \"_doc\",
 \"_id\": \"1\",
 \"_score\": 1.0,
 \"_source\": { 
 \"field1\": \"value1\",
 \"field2\": \"value2\"
 }
 },
 // 其他文档...
 ]
 }
 }
 ```
优点
• 简单易用,适合用户界面分页。
• 支持随机访问任意页。
 缺点
• 性能随`from`值增大而下降。
• 默认限制为 10,000 条结果。
 适用场景
• 结果数量较少的场景。
• 用户界面分页。
 ---
2.`scroll`API
 原理
 `scroll`API 通过创建一个快照(snapshot)来保持搜索上下文,允许遍历大量数据。
 实现细节
1. 初始化搜索上下文:首次请求返回初始结果和`_scroll_id`。
2. 滚动请求:使用`_scroll_id`获取更多结果。
3. 清理上下文:完成滚动后需清理上下文。
 示例
 初始化请求:
```json
 POST /index_name/_search?scroll=1m
 { 
 \"size\": 100,
 \"query\": { 
 \"match_all\": {}
 }
 }
 ```
响应:
```json
 { 
 \"_scroll_id\": \"abc123...\",
 \"took\": 1,
 \"timed_out\": false,
 \"_shards\": { 
 \"total\": 1,
 \"successful\": 1,
 \"failed\": 0
 },
 \"hits\": { 
 \"total\": { 
 \"value\": 1000,
 \"relation\": \"eq\"
 },
 \"hits\": [
 { 
 \"_index\": \"index_name\",
 \"_type\": \"_doc\",
 \"_id\": \"1\",
 \"_source\": {  


