2016-02-04 130 views
5

我正在尝试将JSON发送到elasticSearch。我一直在使用邮差和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

我最近遇到了这个使用curl,这是一个简单的错字。我没有使用内联json,而是来自一个文件。我忘了在文件名之前加入@符号。

curl -XPUT -H'Content-Type:application/json' localhost:9200/twitter [email protected]