【问题标题】:Elasticsearch "no requests added" Bulk API ErrorElasticsearch“未添加请求”批量 API 错误
【发布时间】:2014-04-10 18:38:52
【问题描述】:

尝试让批量更新在 ES 1.0.1 上运行。

我在 Postman 内部发布以下内容:

网址POST或PUT转http://localhost:9200/_bulk

请求正文:

{ "update" : { "_index" : "test_people", "_type" : "person", "_id" : "1" }} \n
{ "doc" : { "name":"hi", "age":100 }} \n

我已经尝试过使用和不使用\n。我总是得到

{
    "error": "ActionRequestValidationException[Validation Failed: 1: no requests added;]",
    "status": 500
}

它也在使用数据创建时做同样的事情:

{
  "create": {
    "_index": "test_people",
    "_type": "person",
    "_id": "1"
  }
}
{
  "name": "hi",
  "age": 100
}

更新

我已在 Mac、PC 和 Linux 上尝试过此操作,但我不断收到相同的错误。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    尽管我在最后一行有\n,但在我的最后一行 json 行之后,我确实必须有一个完整的回车。

    以下工作:

    { "update" : { "_index" : "test_people", "_type" : "person", "_id" : "1" }} \n
    { "doc" : { "name":"hi", "age":100 }}
    

    所以"doc"下面需要有一个空行。

    【讨论】:

    • 你的意思是而不是在最后一行的末尾有\n,我们需要有一个回车(Windows 上的Enter 键)。
    • 最后两个\ns 就可以了,不需要\r。
    • 在邮递员中,您也可以在正文后添加新的空白行。谢谢
    【解决方案2】:

    如果您使用 cURL,则必须在批量项的末尾有一个空行,并且您必须使用 --data-binary(而不是普通的 -d)。例如,假设您有一个名为 bulk 的文件,其中包含:

    { "index" : { "_id" : 1 } }
    { "accounts" : ["hillary", "sidney"]}
    { "index" : { "_id" : 2 } }
    { "accounts" : ["hillary", "donald"]}
    { "index" : { "_id" : 3 } }
    { "accounts" : ["vladimir", "donald"]}
    

    确保文件以空行结束,然后使用 cURL 发布:

    curl -i -XPOST -H'content-type: application/json' 'localhost:9200/emails/message/_bulk?refresh&pretty' --data-binary @bulk
    

    【讨论】:

      【解决方案3】:

      确实是一个空白 new line ,在文档行之后就可以了。

      【讨论】:

        猜你喜欢
        • 2020-07-24
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2019-09-17
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多