2016-02-04 136 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]