es 6.x scroll用法


我們可以使用from +size來獲取所有數據,但是,如果數據量大的時候,這樣的操作開銷很大,這時候可以使用scroll操作

1.第一步發起一個scroll 的post請求,帶上參數scroll=1m (1m的意思是1分鍾的意思)

POST /twitter/_search?scroll=1m { "size": 100, "query": { "match" : { "title" : "elasticsearch" } } }

這一步會得到一個_scroll_id

 

 

 

2. 使用第一步得到的_scroll_id 來翻頁,一直執行這個請求,就可以得到所有的數據了
POST /_search/scroll  { "scroll" : "1m",  "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAA3okgWbkYzT1lBcjRUS0NmbkRnclY3bElmUQ=="  }

注意:
1. 如果想加快索引,第一步加上sort選項, 有些文章會說使用 search_type=scan ,但這個選項是要es 2.1版本之前才有用,之后的版本就被棄用了,改成sort選項了
GET /_search?scroll=1m { "sort": [ "_doc" ] }

 

 

2.scroll參數說明,這個表示_scroll_id的有效期有多久,如果超過這個有效期,那再去翻頁就會得到404 error,並且每次翻頁都會重置有效期,所以這個有效期只需要大於前后兩次翻頁的時間(也就是你處理一頁數據的時間)

3. scrapy去請求翻頁,很有可能因為_scroll_id沒有變化,造成請求重復而被放棄,一定要加上dont_filter=True

4.我在做這個測試的時候,發現window測試電腦用外網地址去請求centos服務器的ES數據很慢,而用內網中的linux計算機去請求同樣的服務器數據,時間快了20倍

 

 

參考

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-scroll

https://www.elastic.co/guide/en/elasticsearch/reference/5.4/breaking_50_search_changes.html


免責聲明!

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



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