批量導入能夠合併多個操做,好比index,delete,update,create等等。也能夠幫助從一個索引導入到另外一個索引。nginx
語法大體以下;json
action_and_meta_data\n optional_source\n action_and_meta_data\n optional_source\n .... action_and_meta_data\n optional_source\n
須要注意的是,每一條數據都由兩行構成(delete除外),其餘的命令好比index和create都是由元信息行和數據行組成,update比較特殊它的數據行多是doc也多是upsert或者script,若是不瞭解的朋友能夠參考前面的update的翻譯。服務器
注意,每一行都是經過\n回車符來判斷結束,所以若是你本身定義了json,千萬不要使用回車符。否則_bulk命令會報錯的!curl
好比咱們如今有這樣一個文件,data.json:編碼
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } { "field1" : "value1" }
它的第一行定義了_index,_type,_id等信息;第二行定義了字段的信息。url
而後執行命令:spa
curl -XPOST localhost:9200/_bulk --data-binary @data.json
就能夠看到已經導入進去數據了。翻譯
對於其餘的index,delete,create,update等操做也能夠參考下面的格式:3d
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } } { "field1" : "value1" } { "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } } { "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } } { "field1" : "value3" } { "update" : {"_id" : "1", "_type" : "type1", "_index" : "index1"} } { "doc" : {"field2" : "value2"} }
若是在路徑中設置了index或者type,那麼在JSON中就不須要設置了。若是在JSON中設置,會覆蓋掉路徑中的配置。code
好比上面的例子中,文件中定義了索引爲test,類型爲type1;而咱們在路徑中定義了默認的選項,索引爲test333,類型爲type333。執行命令後,發現文件中的配置會覆蓋掉路徑中的配置。這樣也提供了統一的默認配置以及個性化的特殊配置的需求。
因爲bulk是一次性提交不少的命令,它會把這些數據都發送到一個節點,而後這個節點解析元數據(index或者type或者id之類的),而後分發給其餘的節點的分片,進行操做。
因爲不少命令執行後,統一的返回結果,所以數據量可能會比較大。這個時候若是使用的是chunk編碼的方式,分段進行傳輸,可能會形成必定的延遲。所以仍是對條件在客戶端進行必定的緩衝,雖然bulk提供了批處理的方法,可是也不能給太大的壓力!
最後要說一點的是,Bulk中的操做執行成功與否是不影響其餘的操做的。並且也沒有具體的參數統計,一次bulk操做,有多少成功多少失敗。
擴展:在Logstash中,傳輸的機制其實就是bulk,只是他使用了Buffer,若是是服務器形成的訪問延遲可能會採起重傳,其餘的失敗就只丟棄了....