# Batch Processing（批处理）

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.4/_batch_processing.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/_batch_processing.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260724](http://www.apache.wiki/pages/viewpage.action?pageId=4260724)

贡献者 : [那伊抹微笑](/display/~wangyangting)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

除了可以索引，更新，和删除单个的文档之外，**Elasticsearch** 还提供了使用 [`_bulk` API](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/docs-bulk.html "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** 返回时，它将提供每个动作的状态（与发送的顺序相同），所以您可以检查是否一个指定的动作是不是失败了。