滚动查询
当搜索请求返回结果的单个页面时,滚动API可用于从单个搜索请求中检索大量结果。
目前支持滚动查询的客户端只有perl版和python版。
Perl: Search::Elasticsearch::Client::5_0::Bulk and Search::Elasticsearch::Client::5_0::Scroll
Python: elasticsearch.helpers.
步骤如下:
- 获取scroll id,用于查询
- 利用scroll id循环查询
- 清除scroll id(可选)
获取scroll id
为了使用滚动,初始搜索请求应该在查询字符串中指定滚动参数,它告诉Elasticsearch应该保持“搜索上下文”存在多长时间,例如?scroll = 1m。
POST /twitter/tweet/_search?scroll=1m
{
"size": 100,
"query": {
"match" : {
"title" : "elasticsearch"
}
}
}
会得到如下类似的响应:
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAABFlV2SjExVXdpUmwtNVFTOThNaWFRTVEAAAAAAAAAAhZVdkoxMVV3aVJsLTVRUzk4TWlhUU1RAAAAAAAAAAMWVXZKMTFVd2lSbC01UVM5OE1pYVFNUQAAAAAAAAAEFlV2SjExVXdpUmwtNVFTOThNaWFRTVEAAAAAAAAABRZVdkoxMVV3aVJsLTVRUzk4TWlhUU1R",
"took": 879,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 136982,
"max_score": 1,
"hits": [
]
}
}
利用scroll id进行查询
获取到scroll id之后,就可以利用它进行下一次的批量查询了。
查询条件会继承上次的查询条件和参数,并且会保持scroll id的活跃,不让它过期。
例如:
POST /_search/scroll
{
"scroll" : "1m",
"scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}
清除scroll id(可选)
当Scroll id到期时,会自己清除,但是当设置的过期时间过长时,这时又以及查询完毕数据,可以选择手动清除scroll id.
DELETE /_search/scroll
{
"scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}