Elasticsearch滚动查询

滚动查询

当搜索请求返回结果的单个页面时,滚动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=="
}

你可能感兴趣的:(elasticsearch)