NodeJs-ElasticSearch批量APIerror handling

如果Elastic Bulk API在一个或多个操作上失败,我找不到任何文档。 例如,对于以下请求,假设已经有一个ID为“3”的文档,所以“创build”应该失败 – 这是否会失败所有其他操作

{ "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"} } 
  • 我正在使用nodejs弹性模块。

一个行动不失败不会影响其他人。

从elasticsearch bulk api的文档 :

对批量操作的响应是一个很大的JSON结构,每个操作执行的结果都是单独的。 单一行动的失败并不影响其余的行动。

在来自elasticsearch客户端的响应中,对应于每个动作的响应status以确定其是否失败

例:

  client.bulk({ body: [ // action description { index: { _index: 'test', _type: 'test', _id: 1 } }, // the document to index { title: 'foo' }, // action description { update: { _index: 'test', _type: 'test', _id: 332 } }, // the document to update { doc: { title: 'foo' } }, // action description { delete: { _index: 'test', _type: 'test', _id: 33 } }, // no document needed for this delete ] }, function (err, resp) { if(resp.errors) { console.log(JSON.stringify(resp, null, '\t')); } }); 

响应:

  { "took": 13, "errors": true, "items": [ { "index": { "_index": "test", "_type": "test", "_id": "1", "_version": 20, "_shards": { "total": 2, "successful": 1, "failed": 0 }, "status": 200 } }, { "update": { "_index": "test", "_type": "test", "_id": "332", "status": 404, "error": { "type": "document_missing_exception", "reason": "[test][332]: document missing", "shard": "-1", "index": "test" } } }, { "delete": { "_index": "test", "_type": "test", "_id": "33", "_version": 2, "_shards": { "total": 2, "successful": 1, "failed": 0 }, "status": 404, "found": false } } ] }