Ошибка ElasticSearch при отправке данных
Я пытаюсь отправить JSON в elasticSearch. Я пробовал использовать Postman и SOAPUI Данные
[{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}, {"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""}]
Я получаю следующую ошибку обратно
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "failed to parse"
}
],
"type": "mapper_parsing_exception",
"reason": "failed to parse",
"caused_by": {
"type": "not_x_content_exception",
"reason": "Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"
}
},
"status": 400
}
но когда я публикую один массив JSON, т. е.
{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}
тогда он работает нормально. Я новичок в ElasticSearch, поэтому не уверен, что происходит неправильно.
5 ответов
сначала попробуйте использовать фигурные скобки,а затем назовите массив. Попробуйте это и посмотрите, работает ли это.
например:
{root:[1, 2, 3, 4, 5]}
может работать, потому что он находится внутри объекта.
еще лучше; пока я экспериментировал с JSON.stringify();
, я обнаружил, что он скрывает массивы для JSON так:
{1, 2, 3, 4, 5}
спасибо @hellol11
это сработало, когда я изменил на
{root :
[
{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"},
{"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""}
]}
в среде Windows, я решил эту проблему.
-d plus double quotation(")
и объемное имя с обратной косой чертой плюс двойная цитата (\")
команда>
curl (more-option) -d "{\"column1\": \"abc\", \"column2\": \"def\", \"column3\": \"dghi\", \"column4\": \"jkl\", \"column5\": \"mno\"}"
в эластичном поиске, если вы хотите опубликовать объемные данные, каждый объект списка должен быть в новой строке .поэтому, если вы используете sense, сделайте все в новой строке или если используете из кода, добавьте новый символ строки \n...
недавно я столкнулся с этим, используя curl, и это была простая опечатка. Я не использовал встроенный json, а из файла. Я забыл включить знак @ перед именем файла.
curl -XPUT -H'Content-Type:application/json' localhost:9200/twitter -d@mappings.json