Ошибка 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