Elasticsearch Scroll

Scroll


当搜索请求返回结果的单个页面时,scroll API可以用于从单个搜索请求中检索大量结果(甚至所有的结果),类似于在传统数据库中使用游标。
滚动的用途不是实时响应用户请求,而是处理大规模数据。eg:将一个索引的内容reindex到另一个拥有不同配置的索引中。

由一个滚动请求返回的结果反映了初始搜索请求发送时索引的状态,类似于快照。之后对文档的改变只能影响之后的搜索请求。

搜索请求(开启滚动)

GET /bank/_search?scroll=1m
{
  "size": 100,
  "query": {
    "match_all": {}
  }
}

note:返回一百个文档,剩余结果保存1m。
note:滚动请求会返回一个scroll_id字段,使用此字段获取剩余的查询结果。

滚动搜索

GET /_search/scroll
{
  "scroll": "1m",
  "scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAADhFk1CcGFVbW1PVDVHbDQzaXFlZGI4OGcAAAAAAAAA3xZNQnBhVW1tT1Q1R2w0M2lxZWRiODhnAAAAAAAAAN4WTUJwYVVtbU9UNUdsNDNpcWVkYjg4ZwAAAAAAAADgFk1CcGFVbW1PVDVHbDQzaXFlZGI4OGcAAAAAAAAA3RZNQnBhVW1tT1Q1R2w0M2lxZWRiODhn"
}

note:获取下一个一百个文档。
note:剩余文档再多存活1m。

size参数允许配置每批返回的命中的最大数量。每次对scroll API的调用都会返回下一批结果,直到所有的结果被返回,即hits数组为空。

初始搜索请求与接下来的每次滚动请求都返回一个_scroll_id。虽然_scroll_id可能会在请求间改变,但是它在任何情况下都不会被更改,应该使用最近接收的_scroll_id。

如果请求指定了聚合,只有初始搜索响应会包含聚合结果。

如果排序顺序为_doc,滚动请求具有更快的优化。

迭代所有文档(高效)

GET /_search?scroll=1m
{
  "sort": [
    "_doc"
  ]
}

保证搜索上下文存活
scroll参数告知Elasticsearch应该保证搜索上下文存活的时间。它的值不需要长到足以处理所有的数据,它只需要长到足够处理上一批结果,每一次滚动请求(包含scroll参数)都会设置新的终结时间。

通常情况下,后台合并进程通过合并较小段来创建较大块来优化索引,在此期间,较小段会被删除。在滚动期间,这个过程也会进行,但是当旧的段被使用时,一个打开的搜索上下文会阻止其被删除。这就是即使之后对文档进行了修改,Elasticsearch仍可以返回最初搜索请求的原因。

保持旧段存活意味着需要更多的文件句柄。确保配置的节点拥有充足的空闲文件句柄。

删除滚动(单个)

DELETE /_search/scroll
{
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}

删除所有滚动

DELETE /_search/scroll/_all

Elasticsearch 6.4 文档

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值