Scroll
search
请求返回一个单一的结果“页”,而 scroll
API 可以被用来检索大量的结果(甚至所有的结果),就像在传统数据库中使用的游标 cursor。
滚动并不是为了实时的用户响应,而是为了处理大量的数据,例如,为了使用不同的配置来重新索引一个 index 到另一个 index 中去。
client 支持:Perl 和 Python
注意:从 scroll 请求返回的结果反映了 search
发生时刻的索引状态,就像一个快照。后续的对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。
为了使用 scroll,初始搜索请求应该在查询中指定 scroll
参数,这可以告诉 Elasticsearch 需要保持搜索的上下文环境多久(参考Keeping the search context alive),如 ?scroll=1m
。
POST /twitter/tweet/_search?scroll=1m
{
"query": {
"match" : {
"title" : "elasticsearch"
}
}
}
使用上面的请求返回的结果中包含一个 scroll_id
,这个 ID 可以被传递给 scroll
API 来检索下一个批次的结果。
POST /_search/scroll
{
"scroll" : "1m",
"scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1"
}
GET
或者POST
可以使用- URL不应该包含
index
或者type
名字——这些都指定在了原始的search
请求中。 scroll
参数告诉 Elasticsearch 保持搜索的上下文等待另一个1m
scroll_id
参数
每次对 scroll
API 的调用返回了结果的下一个批次知道没有更多的结果返回,也就是直到 hits
数组空了。
为了向前兼容,scroll_id
和 scroll
可以放在查询字符串中传递。scroll_id
则可以在请求体中传递。
curl -XGET 'localhost:9200/_search/scroll?scroll=1m' -d 'c2Nhbjs