1.爲何要使用scroll?性能
若是一次性要查出來好比10萬條數據,那麼性能會不好,此時通常會採起用scoll滾動查詢,一批一批的查,直到全部數據都查詢完處理完spa
2.原理code
使用scoll滾動搜索,能夠先搜索一批數據,而後下次再搜索一批數據,以此類推,直到搜索出所有的數據來
scoll搜索會在第一次搜索的時候,保存一個當時的視圖快照,以後只會基於該舊的視圖快照提供數據搜索,若是這個期間數據變動,是不會讓用戶看到的
採用基於_doc進行排序的方式,性能較高blog
每次發送scroll請求,咱們還須要指定一個scoll參數,指定一個時間窗口,每次搜索請求只要在這個時間窗口內能完成就能夠了排序
3.實操it
GET /test_index/test_type/_search?scroll=1m { "query": { "match_all": {} }, "sort": [ "_doc" ], "size": 3 }
{ "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAACxeFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYBY0b25zVFlWWlRqR3ZJajlfc3BXejJ3AAAAAAAALF8WNG9uc1RZVlpUakd2SWo5X3NwV3oydwAAAAAAACxhFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYhY0b25zVFlWWlRqR3ZJajlfc3BXejJ3", "took": 5, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 10, "max_score": null, "hits": [ { "_index": "test_index", "_type": "test_type", "_id": "8", "_score": null, "_source": { "test_field": "test client 2" }, "sort": [ 0 ] }, { "_index": "test_index", "_type": "test_type", "_id": "6", "_score": null, "_source": { "test_field": "tes test" }, "sort": [ 0 ] }, { "_index": "test_index", "_type": "test_type", "_id": "AVp4RN0bhjxldOOnBxaE", "_score": null, "_source": { "test_content": "my test" }, "sort": [ 0 ] } ] } }
得到的結果會有一個scoll_id,下一次再發送scoll請求的時候,必須帶上這個scoll_idclass
GET /_search/scroll { "scroll": "1m", "scroll_id" : "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAACxeFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYBY0b25zVFlWWlRqR3ZJajlfc3BXejJ3AAAAAAAALF8WNG9uc1RZVlpUakd2SWo5X3NwV3oydwAAAAAAACxhFjRvbnNUWVZaVGpHdklqOV9zcFd6MncAAAAAAAAsYhY0b25zVFlWWlRqR3ZJajlfc3BXejJ3" }
4.scroll和分頁的區別?test
scoll,看起來挺像分頁的,可是其實使用場景不同。分頁主要是用來一頁一頁搜索,給用戶看的;scoll主要是用來一批一批檢索數據,讓系統進行處理的原理