Elasticsearch"没有添加任何请求"批量API错误

时间:2014-04-10 18:38:52

标签: elasticsearch

尝试将批量更新用于ES 1.0.1。

我在Postman内发布以下内容:

网址 POSTPUThttp://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上尝试过此操作,但我不断遇到同样的错误。

3 个答案:

答案 0 :(得分:109)

即使我在最后一行有\n,但我确实在我的最后一条json线后有一个完整的回车。

以下工作:

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

因此"doc"行下方需要有一个空行。

答案 1 :(得分:19)

在文档行完成后,确实有一个空白新行

enter image description here

答案 2 :(得分:1)

如果您正在使用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