一尘不染

NodeJs-ElasticSearch批量API错误处理

elasticsearch

我找不到任何有关Elastic Bulk API在一项或多项操作失败时会发生什么情况的文档。例如,对于以下请求,假设已经有一个ID为“
3”的文档,那么“创建”应该 失败-这会使所有其他操作失败 吗?

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

阅读 346

收藏
2020-06-22

共1个答案

一尘不染

任何一项行动的任何失败都不会影响其他行动。

从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
                        }
                }
        ]
}
2020-06-22