ES bulk 批量操作


bulk允許在一個請求中進行多個操作(create、index、update、delete),也就是可以在一次請求裡做很多事情

也由於這個關系,因此bulk的請求體和其他請求的格式會有點不同

bulk的請求模板

分成action、metadata和doc三部份

action : 必須是以下4種選項之一

  index(最常用) : 如果文檔不存在就創建他,如果文檔存在就更新他

  create : 如果文檔不存在就創建他,但如果文檔存在就返回錯誤

  使用時一定要在metadata設置_id值,他才能去判斷這個文檔是否存在

  update : 更新一個文檔,如果文檔不存在就返回錯誤

  使用時也要給_id值,且后面文檔的格式和其他人不一樣

  delete : 刪除一個文檔,如果要刪除的文檔id不存在,就返回錯誤

使用時也必須在metadata中設置文檔_id,且后面不能帶一個doc,因為沒意義,他是用_id去刪除文檔的

metadata : 設置這個文檔的metadata,像是_id、_index、_type...

doc : 就是一般的文檔格式

 

 

bulk 如果一次性數據過多,很容易導致超時 

elasticsearch.exceptions.ConnectionTimeout: ConnectionTimeout caused by - ReadTimeoutError(HTTPConnectionPool(host='192.168.0.92', port='9200'): Read timed out. (read timeout=10))

 

查看bulk 源碼發現

 

@query_params('_source', '_source_exclude', '_source_include', 'fields',
        'pipeline', 'refresh', 'routing', 'timeout', 'wait_for_active_shards')
    def bulk(self, body, index=None, doc_type=None, params=None):

有個timeout參數,可以設置超時時間,默認是10s

bulk(es, actions, request_timeout=100)


 


免責聲明!

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



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