2016-02-04 6 views
5

Я пытаюсь отправить JSON на эластичный поиск. Я попытался с помощью Почтальон и SoapUI Эти данныеОшибка ElasticSearch при отправке данных

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

Сначала попробуйте использовать фигурные скобки, а затем назовите массив. Это называется JSON по какой-то причине, поэтому попробуйте это и посмотрите, работает ли он.

Например:

{root:[1, 2, 3, 4, 5]} 

может работать, потому что он находится внутри объекта.

Еще лучше; в то время как я экспериментировал с JSON.stringify();, я обнаружил, что кроющие массивы JSON выглядеть примерно так:

{1, 2, 3, 4, 5} 
+1

спасибо за ответ, но не уверен, что вы имеете в виду – noobEngineer

+9

-1, в то время это приводит к правильному ответу, это не очень толковые и негативный тон действительно не полезно. Исходный вопрос имеет действительный JSON, это одноэлементный массив. Проблема, на которую отвечает этот вопрос, заключается в том, что ElasticSearch требует, чтобы внешний документ был объектом JSON, а не массивом JSON или скалярным значением. Пример рефакторинга тоже будет хорош и не займет слишком много времени в этом случае. –

5

спасибо @ hellol11

он работал, когда я изменил

{root : 
[ 
    {"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}, 
    {"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""} 

]} 
+1

Какую команду вы использовали для публикации своего json? – Techiee

0

В среде Windows, Я решил эту проблему.

-d plus double quotation(") 

и окружать имя с обратной косой черты плюс двойной quotaton (\ ")

команда>

curl (more-option) -d "{\"column1\": \"abc\", \"column2\": \"def\", \"column3\": \"dghi\", \"column4\": \"jkl\", \"column5\": \"mno\"}" 
0

В упругом поиска, если вы хотите разместить объемные данные, то каждый объект списка должен быть в новой строке .so, если вы используете смысл, затем делаете все в новой строке или используете из кода, затем добавляете новый символ строки \ n ...

0

Я недавно столкнулся с этим использованием завитка, и это была простая опечатка. Я не использовал встроенный json, но из файла. Я забыл включить знак @ перед именем файла.

curl -XPUT -H'Content-Type:application/json' localhost:9200/twitter [email protected] 
Смежные вопросы