Link Search Menu Expand Document Documentation Menu

滚动

1.0 版引入

您可以使用 scroll 操作检索大量结果。例如,对于机器学习任务,您可以分批请求无限数量的结果。

要使用 scroll 操作,请在请求头中添加一个 scroll 参数,其中包含一个搜索上下文,以告知 OpenSearch 您需要滚动多长时间。此搜索上下文需要足够长以处理单个批次的结果。

由于搜索上下文会消耗大量内存,我们建议您不要将 scroll 操作用于频繁的用户查询。相反,请使用 sort 参数与 search_after 参数来滚动用户查询的响应。

端点

GET _search/scroll
POST _search/scroll
GET _search/scroll/<scroll-id>
POST _search/scroll/<scroll-id>

路径参数

参数 类型 描述
scroll_id 字符串 搜索的滚动 ID。

查询参数

所有滚动参数均为可选。

参数 类型 描述
scroll 时间 指定搜索上下文的维护时间。
scroll_id 字符串 搜索的滚动 ID。
rest_total_hits_as_int 布尔型 hits.total 属性作为整数 (true) 还是对象 (false) 返回。默认值为 false

示例请求

要设置每个批次要返回的结果数量,请使用 size 参数

GET shakespeare/_search?scroll=10m
{
  "size": 10000
}

OpenSearch 缓存结果并返回一个滚动 ID 以批处理方式访问它们

"_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAAUWdmpUZDhnRFBUcWFtV21nMmFwUGJEQQ=="

将此滚动 ID 传递给 scroll 操作以获取下一批结果

GET _search/scroll
{
  "scroll": "10m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAAUWdmpUZDhnRFBUcWFtV21nMmFwUGJEQQ=="
}

只要搜索上下文仍处于打开状态,使用此滚动 ID,您将以 10,000 个结果的批次获取结果。通常,滚动 ID 在请求之间不会改变,但它可能改变,因此请务必始终使用最新的滚动 ID。如果您未在设置的搜索上下文时间内发送下一个滚动请求,scroll 操作将不会返回任何结果。

如果您期望数十亿结果,请使用切片滚动。切片允许您对同一个请求执行多个滚动操作,但以并行方式。设置滚动 ID 和最大切片数

GET shakespeare/_search?scroll=10m
{
  "slice": {
    "id": 0,
    "max": 10
  },
  "query": {
    "match_all": {}
  }
}

使用单个滚动 ID,您将获得 10 个结果。您最多可以有 10 个 ID。

完成滚动后关闭搜索上下文,因为 scroll 操作会持续消耗计算资源直到超时

DELETE _search/scroll/DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAAcWdmpUZDhnRFBUcWFtV21nMmFwUGJEQQ==

要关闭所有打开的滚动上下文

DELETE _search/scroll/_all

scroll 操作对应于一个特定时间戳。它不考虑在该时间戳之后添加的文档作为潜在结果。

示例响应

{
  "succeeded": true,
  "num_freed": 1
}
剩余 350 字符

有问题?

想贡献?