Elasticsearch---基於scroll技術滾動搜索大量數據


如果一次性要查出來比如10萬條數據,那么性能會很差,此時一般會采取用scoll滾動查詢,一批一批的查,直到所有數據都查詢完處理完

使用scoll滾動搜索,可以先搜索一批數據,然后下次再搜索一批數據,以此類推,直到搜索出全部的數據來
scoll搜索會在第一次搜索的時候,保存一個當時的視圖快照,之后只會基於該舊的視圖快照提供數據搜索,如果這個期間數據變更,是不會讓用戶看到的
采用基於_doc進行排序的方式,性能較高
每次發送scroll請求,我們還需要指定一個scoll參數,指定一個時間窗口,每次搜索請求只要在這個時間窗口內能完成就可以了

GET /test_index/test_type/_search?scroll=1m
{
  "query": {
    "match_all": {}
  },
  "sort":["_doc"],
  "size":3
}
//結果
{
  "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAABlEFlhIb1FOME82U3llb202bER1Zm95VkEAAAAAAAAZRRZYSG9RTjBPNlN5ZW9tNmxEdWZveVZBAAAAAAAAGUYWWEhvUU4wTzZTeWVvbTZsRHVmb3lWQQAAAAAAABlHFlhIb1FOME82U3llb202bER1Zm95VkEAAAAAAAAZSBZYSG9RTjBPNlN5ZW9tNmxEdWZveVZB",
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 10,
    "max_score": null,
    "hits": [
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "AVsxkqabZ1jIX97EnDWz",
        "_score": null,
        "_source": {
          "test_filed": "auto_id"
        },
        "sort": [
          0
        ]
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "12",
        "_score": null,
        "_source": {
          "test_field": "test_12"
        },
        "sort": [
          0
        ]
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "2",
        "_score": null,
        "_source": {
          "test_field": "test_test_external_vesion"
        },
        "sort": [
          0
        ]
      }
    ]
  }
}

獲取的結果會有一個scroll__id,下次再發送scroll請求的時候,必須帶上這個scroll_id

GET /_search/scroll
{
  "scroll":"1m",
 "scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAABmIFlhIb1FOME82U3llb202bER1Zm95VkEAAAAAAAAZjBZYSG9RTjBPNlN5ZW9tNmxEdWZveVZBAAAAAAAAGYoWWEhvUU4wTzZTeWVvbTZsRHVmb3lWQQAAAAAAABmLFlhIb1FOME82U3llb202bER1Zm95VkEAAAAAAAAZiRZYSG9RTjBPNlN5ZW9tNmxEdWZveVZB"
}
      </div>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM