我正在尝试向elasticSearch发送JSON。我尝试过使用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的新手,所以不确定出了什么问题。
答案 0 :(得分:7)
首先尝试使用花括号,然后命名数组。试试看,看看它是否有效。
例如:
{root:[1, 2, 3, 4, 5]}
可能有效,因为它包含在一个对象中。
更好;当我在试验JSON.stringify();
时,我发现它将数组转换为JSON,如下所示:
{1, 2, 3, 4, 5}
答案 1 :(得分:6)
谢谢@ hellol11
当我改为
时它起作用了 {root :
[
{"column1": "abc", "column2": "def", "column3": "dghi", "column4": "jkl", "column5": "mno"},
{"column1": "pqr", "column2": "stu", "column3": "vwx", "column4": "", "column5": ""}
]}
答案 2 :(得分:3)
我最近使用curl遇到了这个,这是一个简单的拼写错误。我没有使用内联json,而是使用文件。我忘了在文件名前面加上@符号。
curl -XPUT -H'Content-Type:application/json' localhost:9200/twitter -d@mappings.json
答案 3 :(得分:2)
我在Python脚本(使用请求)中遇到此问题,尝试并发布到ES。解决方法只是使用json.dumps()
示例(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)
答案 4 :(得分:1)
在Windows环境中,我解决了这个问题。
-d plus double quotation(")
和带有反斜杠加上双引号(\“)
的环绕名称命令&GT;
curl (more-option) -d "{\"column1\": \"abc\", \"column2\": \"def\", \"column3\": \"dghi\", \"column4\": \"jkl\", \"column5\": \"mno\"}"
答案 5 :(得分:0)
在弹性搜索中,如果要发布批量数据,则每个列表对象必须在新行中。如果您使用sense,则在New行中创建所有内容,或者如果在代码中使用,则添加新行字符\ n ..
答案 6 :(得分:0)
在尝试发布到Elasticsearch但使用Node js时遇到了相同的错误。我使用node-fetch包向Elasticsearch发出了PUT请求。这很奇怪,因为在邮递员上使用完全相同的东西时,我没有出现任何错误,但是在节点js上却出现了错误。我最初是在做:
const current = {
"id" : "123456789"
}
const options = {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: current
}
当我将其更改为:
时,发现错误已修复。body: JSON.stringify(current)