NodeJs-ElasticSearch批量API错误处理

时间:2016-06-09 14:22:01

标签: node.js elasticsearch

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

{ "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弹性模块。

1 个答案:

答案 0 :(得分:7)

一个动作中的任何失败都不会影响其他动作。

来自elasticsearch bulk api的documentation

  

对批量操作的响应是一个大型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
                        }
                }
        ]
}