除了可以索引,更新,和删除单个的文档之外,Elasticsearch 还提供了使用 _bulk
API 来执行上面任何操作的批量方式的能力。这个功能是非常重要,它提供了一种非常有效的机制,以尽可能减少网络返回且尽可能快的执行多个操作。
作为一个简单的例子,在一个批量操作中下面调用且索引了两个文档(ID 1 - John Doe 和 ID 2 - Jane Doe):
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty&pretty' -d'
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
'
这个例子使用一个批量操作更新了第一个文档(ID 为 1),然后删除了第二个文档(ID 为 2) :
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty&pretty' -d'
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'
请注意上面的删除操作,在它后面没有相关的源文档,因为删除操作只需要文档的 ID 来删除。
该 bulk API 以此按顺序执行所有的 action(动作)。如果一个单个的动作因任何原因而失败,它将继续处理它后面剩余的动作。当 bulk API 返回时,它将提供每个动作的状态(与发送的顺序相同),所以您可以检查是否一个指定的动作是不是失败了。