ES Scroll滾動查詢

前端查詢,經常有分頁展示的需求,關係型數據庫中往往都提供了類似於top  limit這樣的語義來支持分頁查詢。elasticsearch中也提供了from szie這兩個參數來支持分頁查詢,但是當一個索引中文檔數非常巨大的時候,通過from、size來實現分頁查詢對性能影響很大。所以,ES提供了滾動查詢API來提高查詢性能,下面介紹下Scroll API的基本用法。

首先新建一個索引,插入一些測試數據

PUT test_scroll
{
  "settings": {
    "number_of_shards": 1
    , "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "id":{
        "type": "keyword"
      },
      "content":{
        "type": "text"
      }
    }
  }
}

然後,我們新建一個查詢,ES稱之爲初始化查詢。假設我們需要一次返回10條數據,可以新建如下查詢:

POST test_scroll/_search?scroll=1m
{
  "size": 10, 
  "query": {
    "match_all": {}
  }
}

執行成功後,返回的結果裏有一個_scroll_id字段 

接下來我們使用scroll api進行後續的滾動查詢,其中要指定前一次查詢返回的_scroll_id 。其中scroll參數是告訴ES要保留這個查詢上下文(可以理解爲session)多長時間,示例 1m 代表1分鐘。The search context is created by the initial request and kept alive by subsequent requests。

POST _search/scroll
{
  "scroll":"1m",
  "scroll_id":"DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAucIWajJ0MFVzTy1RVWEtWXRGWjQ1RzZjZw=="
}

假設我們想手動清除這個滾動上下文(scroll search context),可以利用下面的API:

DELETE /_search/scroll
{
    "scroll_id" : [
      "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==",
      "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAABFmtSWWRRWUJrU2o2ZExpSGJCVmQxYUEAAAAAAAAAAxZrUllkUVlCa1NqNmRMaUhiQlZkMWFBAAAAAAAAAAIWa1JZZFFZQmtTajZkTGlIYkJWZDFhQQAAAAAAAAAFFmtSWWRRWUJrU2o2ZExpSGJCVmQxYUEAAAAAAAAABBZrUllkUVlCa1NqNmRMaUhiQlZkMWFB"
    ]
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章