发送数据时出现ElasticSearch错误

n3ipq98p  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(8)|浏览(155)

我正在尝试发送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的新手,所以不确定出了什么问题。

tvmytwxo

tvmytwxo1#

尝试先使用大括号,然后命名数组。尝试一下,看看它是否有效。
例如:

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

因为它包含在一个对象中。
甚至更好;当我试验JSON.stringify();时,我发现它将数组转换为JSON,如下所示:

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

cmssoen22#

我最近在使用curl时遇到了这个问题,这是一个简单的错字。我没有使用内联json,而是从一个文件中。我忘记在文件名前包括@符号。

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

jtoj6r0c3#

谢谢@hellol11
当我换成

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

]}
cczfrluj

cczfrluj4#

在Windows环境中,我解决了这个问题。

-d plus double quotation(")

并用反斜杠加双引号(\”)将名称括起来
命令〉

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

ryevplcw5#

我在一个Python脚本(使用请求)中遇到了这个问题,尝试将其POST到ES。
示例(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)
pkbketx9

pkbketx96#

我在尝试发布到elasticsearch时也得到了同样的错误,但是使用的是node js。我使用node-fetch包向elasticsearch发出PUT请求。这很奇怪,因为在postman上使用完全相同的东西,我没有得到错误,但是在node js上得到了错误。我最初是这样做的:

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

当我将其更改为以下内容时,错误得到了修复:

body: JSON.stringify(current)
qc6wkl3g

qc6wkl3g7#

在ElasticSearch中,如果要发布批量数据,则每个列表对象必须位于新行中。因此,如果使用sense,则将所有内容都置于新行中;如果使用from code,则添加新行字符\n...

pcww981p

pcww981p8#

对于那些直接想在curl查询中发送数据并得到"not_x_content_exception"错误的人,我已经设法通过使用双引号修复了它:

curl -X POST "http://localhost:9200/my_index/_doc/1" -H "Content-Type: application/json" -d "{ ""name"": ""Paul"" }"

相关问题