1

我正在尝试使用批量 api 发布以下内容。我有 ES 2.2.0

{"index":{"_index":"junktest","_type":"test"}}
{"DocumentID":"555662","Tags":["B","C","D"],"Summary":"Summary Text","Status":"Review","Location":"HDFS","Error":"None","Author":"Abc Mnb","Sector":"Energy","Created Date":"2013-05-23"},
{"DocumentID":"555663","Tags":["A","B","C"],"Summary":"Summary Text","Status":"Review","Location":"HDFS","Error":"None","Author":"Abc Mnb","Sector":"Energy","Created Date":"2013-04-25"}

作为

curl -XPOST "http://localhost:9200/_bulk" --data-binary @post.json

但我明白了

  {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Malformed
     action/metadata line [3], expected START_OBJECT or END_OBJECT but found [VALUE_
STRING]"}],"type":"illegal_argument_exception","reason":"Malformed action/metadata line [3], expected START_OBJECT or END_OBJECT but found [VALUE_STRING]"},"status":400}

为什么},无效?我什至在没有逗号的情况下尝试过,但我仍然收到错误,即使我没有,

我的语法有什么问题?

编辑

我能够让它工作

{"index":{"_index":"junktest","_type":"test"}}
{"DocumentID":"555662","Tags":["B","C","D"],"Summary":"Summary Text","Status":"Review","Location":"HDFS","Error":"None","Author":"Abc Mnb","Sector":"Energy","Created Date":"2013-05-23"}
{"index":{"_index":"junktest","_type":"test"}}
{"DocumentID":"555663","Tags":["A","B","C"],"Summary":"Summary Text","Status":"Review","Location":"HDFS","Error":"None","Author":"Abc Mnb","Sector":"Energy","Created Date":"2013-04-25"}

这是使用批量 api 索引多条记录的唯一方法吗?

4

3 回答 3

3

从文档

REST API 端点是 /_bulk,它需要以下 JSON 结构:

action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
....
action_and_meta_data\n
optional_source\n

thedocument source是可选的,但它action_meta_data是强制性的,并且两者用新行分隔。鉴于这些限制,您只能为每个操作指定一条记录。

同样在您提供的示例中,您没有在元数据中传递“_id”,这意味着“_id”是自动生成的。可能是故意的,但请记住,如果您打算更新无法使用DocumentId.

于 2016-02-03T19:57:39.727 回答
1

最后一条记录后的换行符对于使其正常工作很重要。我通过在最后一条记录的末尾添加 \n (换行符)解决了类似的问题。

例如,这将不起作用:

"{ "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan"}"

但这会

"{ "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan"} \n "

于 2018-05-22T06:27:23.950 回答
0

JSON结构中不应该有换行符,以前我是用这个输入做的,它产生了上面的错误,

{ 
"index" : { "_index" : "ecommerce", "_type" : "product", "_id" : "1002" 
} 
}
{ "id": 2}

现在它可以使用以下输入正常工作

{ "index" : { "_index" : "ecommerce", "_type" : "product", "_id" : "1002" } }
{ "id": 2}
{"index":{ "_index" : "ecommerce", "_type" : "product","_id":"1003"}}
{ "id": 3,"name":"Dot net"}
于 2017-09-12T11:08:20.770 回答