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

document sourceオプションですが、action_meta_dataは必須であり、この 2 つは改行で区切られています。これらの制約により、アクションごとに 1 つのレコードのみを指定できます。

また、提供した例では、メタデータに「_id」を渡していません。これは、「_id」が自動生成されることを意味します。おそらく意図的なものですが、ドキュメントを更新する場合に備えて、DocumentId.

于 2016-02-03T19:57:39.727 に答える