2016-02-03 2 views
1

Я пытаюсь опубликовать следующее, используя массив api. У меня есть ES 2.2.0Elasticsearch Bulk API: не удается разместить более одной записи

{"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?

ответ

3

Из документации

API-интерфейс конечных точек REST является/_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 является обязательным и два разделены новыми строками. Учитывая эти ограничения, вы можете указывать только одну запись за действие.

Также в приведенном примере вы не передаете «_id» в метаданных, что означает, что «_id» автогенерируется. Возможно, это намеренно, но просто помните, что если вы намерены обновить документ, вы не сможете использовать DocumentId.

+0

Да, я думаю, это единственный способ. это более полезно для нескольких обновлений по нескольким индексам, которые я предполагаю. Я не собирался включать идентификаторы специально. благодаря – AbtPst

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"} 
Смежные вопросы