批量导入能够合并多个操做,好比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,若是是服务器形成的访问延迟可能会采起重传,其余的失败就只丢弃了....