ElasticSearch error while sending data

浪子不回头ぞ 提交于 2019-11-27 06:39:11

问题


I am trying to send a JSON to elasticSearch. I have tried using Postman and SOAPUI The data is

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

I am getting the following error back

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

But when I post a single JSON array I.e.

{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"}

Then it works fine. I am new to ElasticSearch so not sure what is going wrong.


回答1:


Try using curly brackets first, then naming the array. Try that and see if it works.

For example:

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

might work because it's contained inside an object.

Even better; while I was experimenting with JSON.stringify();, I found that it coverts arrays to JSON like so:

{1, 2, 3, 4, 5}



回答2:


thanks @hellol11

it worked when I changed to

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

]}



回答3:


I recently ran into this using curl and it was a simple typo. I was not using inline json, but from a file. I forgot to include the @ sign before the filename.

curl -XPUT -H'Content-Type:application/json' localhost:9200/twitter -d@mappings.json



回答4:


I had this issue inside a Python script (using requests) to try and POST to ES. The resolution was simply to convert the json object to a string using json.dumps()

Example (Python snipit):

import json
import requests

headers={'Content-Type': 'application/json'}
data={'hello':'barney'} 

response = requests.post('https://<my_es_domain>/<my_es_ix>/<my_doc_type>', data=json.dumps(data), headers=headers)



回答5:


In Windows environment, I solved this problem.

-d plus double quotation(") 

and surround name with backslash plus double quotaton(\")

command>

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



回答6:


In elastic search ,if you want to post bulk data then each list object must be in New line .so if you are using sense then make everything in New line or if using from code then add New line character \n...




回答7:


I was getting the same error while trying to post to elasticsearch but using node js. I used the node-fetch package to make a PUT request to elasticsearch. It was weird because using the exact same thing on postman I got no error but I was getting the error on node js. I was initially doing:

const current = {
    "id" : "123456789"
}
const options = {
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    body: current
}

Turns out the error got fixed when I changed it to:

body: JSON.stringify(current)


来源:https://stackoverflow.com/questions/35213472/elasticsearch-error-while-sending-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!