Массовый запрос вызывает ошибку в поиске elastics 6.1.1
Недавно я обновился до версии 6.1.1 elasticsearch, и теперь я не могу массировать индексные документы из 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.x. Я попытался добавить новые строки, а также символ новой строки в конец файла. Кажется, не работает.
Ответы
Ответ 1
Добавьте пустую строку в конец файла JSON и сохраните файл, а затем попробуйте выполнить команду ниже.
curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'
Надеюсь, это сработает для вас.
Ответ 2
Как говорится в документе:
используйте флаг --data-binary
вместо обычного -d
-d
не сохраняет символы новой строки и не форматируют json.
Я столкнулся с этой проблемой из-за JSON-форматирования.
Ответ 3
Ошибка довольно ясна:
The bulk request must be terminated by a newline [\n]
Поэтому вам просто нужно добавить новую строку в конце вашего файла customers_full.json
и все будет в порядке.
Ответ 4
Я столкнулся с тем же вопросом и часами добавлял и удалял новые строки, прежде чем кто-то указал, что я неправильно набрал имя файла... Поэтому обратите внимание, что curl будет вызывать ту же ошибку, если файл на самом деле не присутствует, что делает это супер-запутанным.
Ответ 5
вам просто нужно открыть json файл, а затем перейти в конец файла (Ctrl + end), а затем нажать Enter, чтобы разбить новую строку.
Ответ 6
Вам нужно использовать - -d ata-binary вместо -d в вашем запросе curl. См. Https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html.
Ответ 7
Нажмите Enter конец строки внутри json файла и снова запустите команду.
curl -H "Content-Type: application/x-ndjson" -XPOST 'localhost: 9200/customers/personal/_bulk? pretty & refresh' --data-binary @"generated.json"
Ответ 8
Для тех, кто использует почтальон для отправки запросов в ElasticSearch
Просто нажмите Enter, чтобы создать пустую новую строку!
И вуаля, проблема решена
Ответ 9
У меня была похожая проблема при работе с Elasticsearch 7.3.
Вот как я это решил.
- Найдите файл
.json
, скажем, файл products.json
.
- Дважды щелкните, чтобы открыть файл
.json
в текстовом редакторе.
- Прокрутите до конца файла
.json
и нажмите клавишу ВВОД на клавиатуре.
- Закройте файл
.json
. Это создаст новую строку в конце файла .json
.
- Вернитесь к своему терминалу и выполните команду ниже.
Н/Б: Для приведенной ниже команды имя файла .json
- products.json
, которое я импортирую в http://localhost:9200/ecommerce/product
curl -H "Content-type: application/json" -XPOST "http://localhost:9200/ecommerce/product/_bulk?pretty" --data-binary "@products.json"
Это все.
надеюсь, это поможет
Ответ 10
Это сработало в моей местной обстановке.
curl -H "Тип контента: приложение /json" -XPOST " http://localhost: 9200/customer/personal/_bulk? pretty " --data-binary @"Генерируемый .json"
Ответ 11
Это сработало для меня:
curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@C:\Program Files\Elastic\Elasticsearch\7.2.0\accounts.json"