bulk容許在一個請求中進行多個操做(create、index、update、delete),也就是能夠在一次請求裡作不少事情elasticsearch
也因爲這個關係,所以bulk的請求體和其餘請求的格式會有點不一樣spa
bulk的請求模板code
分紅action、metadata和doc三部份blog
action : 必須是如下4種選項之一ip
index(最經常使用) : 若是文檔不存在就建立他,若是文檔存在就更新他文檔
create : 若是文檔不存在就建立他,但若是文檔存在就返回錯誤源碼
使用時必定要在metadata設置_id值,他才能去判斷這個文檔是否存在it
update : 更新一個文檔,若是文檔不存在就返回錯誤pip
使用時也要給_id值,且後面文檔的格式和其餘人不同io
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)