尝试将批量更新用于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上尝试过此操作,但我不断遇到同样的错误。
答案 0 :(得分:109)
即使我在最后一行有\n
,但我确实在我的最后一条json线后有一个完整的回车。
以下工作:
{ "update" : { "_index" : "test_people", "_type" : "person", "_id" : "1" }} \n
{ "doc" : { "name":"hi", "age":100 }}
因此"doc"
行下方需要有一个空行。
答案 1 :(得分:19)
在文档行完成后,确实有一个空白新行。
答案 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