【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",
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值