【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\": {