当前位置: 首页 > 面试题库 >

NodeJs-ElasticSearch批量API错误处理

公冶威
2023-03-14
问题内容

我找不到任何有关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弹性模块。

问题答案:

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

从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
                        }
                }
        ]
}


 类似资料:
  • 我想问一下关于Elasticsearch批量API的问题 这是我使用批量API的代码 我遇到了超时异常,因为我的记录有800K。java.net.SocketTimeoutException:连接超时30,000毫秒http-outgoing-16[活动] 我试图分解传入的jsonList,但有时会出现相同的错误。 我目前使用的是Elasticsearch 7.6.2版本。 异常跟踪 Java.n

  • 问题内容: 试图让批量更新在ES 1.0.1上运行。 我在邮递员内发布以下内容: URL 或以 请求正文 : 我已经尝试过,无论有没有。我总是 在使用数据进行创建时,它也做同样的事情: 更新资料 我已经在Mac,PC和Linux上尝试过此方法,但不断出现相同的错误。 问题答案: 即使我在最后一行上,我在最后一个json行之后也确实要有完整的回车符。 以下工作: 因此,在该行下方需要有一个空行。

  • 使用RestHighLevelRestClient使用ElasticSearch批量插入时出现异常。 ElasticsearchStatusException[无法解析响应体];嵌套:ResponseException[method[POST],host[http:x.com],URI[/_bulk?timeout=1m],状态行[http/1.1 413请求实体太大]{“消息”:“请求大小超过1

  • 问题内容: 我最近升级到了Elasticsearch版本6.1.1,现在我无法从JSON文件批量索引文档。当我内联完成时,它可以正常工作。以下是文档的内容: 当我运行此命令时, 我收到此错误: 如果我以内联方式和在Elasticsearch 5.x中发送数据,效果很好。我尝试将换行符以及换行符添加到文件末尾。似乎不起作用。 问题答案: 在JSON文件的末尾添加 空 行并保存文件,然后尝试运行以下命

  • 我开始学习spring batch,遇到一个问题,当我想使用在数据库中持久化作业的状态时。编译器显示: “原因:org.springframework.beans.factory.beanCreationException:创建类路径资源[springconfig.xml]中定义的名为'job repository'的bean时出错:调用init方法失败;嵌套异常为java.lang.noClas