Массовый запрос выдает ошибку в elasticsearch 6.1.1
недавно я обновился до elasticsearch версии 6.1.1, и теперь я не могу массово индексировать документы из файла json. Wehn я делаю это inline, он работает нормально. Вот содержание документа:
{"index" : {}}
{"name": "Carlson Barnes", "age": 34}
{"index":{}}
{"name": "Sheppard Stein","age": 39}
{"index":{}}
{"name": "Nixon Singleton","age": 36}
{"index":{}}
{"name": "Sharron Sosa","age": 33}
{"index":{}}
{"name": "Kendra Cabrera","age": 24}
{"index":{}}
{"name": "Young Robinson","age": 20}
когда я запускаю эту команду,
curl -XPUT 'localhost:9200/subscribers/ppl/_bulk?pretty' -H 'Content-Type: application/json' -d @customers_full.json
Я получаю эту ошибку:
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "The bulk request must be terminated by a newline [n]"
}
],
"type" : "illegal_argument_exception",
"reason" : "The bulk request must be terminated by a newline [n]"
},
"status" : 400
он отлично работает, если я отправляю данные inline и в elasticsearch 5.х. Я пробовал добавлять строки, а также символ новой строки в конец файла. Похоже, не работает.
6 ответов
добавить пустой строка в конце файла JSON и сохраните файл, а затем попробуйте выполнить следующую команду
curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'
Я надеюсь, что это работает хорошо для вас.
ошибка довольно ясна:
The bulk request must be terminated by a newline [\n]
поэтому вам просто нужно добавить новую строку в конце вашего customers_full.json
файл, и вы будете в порядке.
Как говорится в документе: используйте флаг --data-binary вместо plain-d. Последний не сохраняет новые строки и не форматировать json. Я столкнулся с этой проблемой из-за форматирования JSON.
Я столкнулся с той же проблемой и потратил часы на добавление и удаление новых строк, прежде чем кто-то указал, что я неправильно набрал имя файла... Поэтому обратите внимание, что curl выдаст ту же ошибку, если файл на самом деле не присутствует, что делает это супер-запутанным.
вам просто нужно открыть файл json, а затем перейти к концу файла (Ctrl+end), а затем введите, чтобы сломать новую строку.
вам нужно использовать --data-binary вместо-d в вашем запросе curl. Пожалуйста, смотрите https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html