Массовый запрос выдает ошибку в 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