問題重現
輸入命令
curl -XPOST -H 'Content-Type:application/json' 'xxxx:9200/bank/account/_bulk?pretty' -d "./acc.json"
報瞭如下的錯誤:
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "The bulk request must be terminated by a newline [\n]"
}
],
"type" : "illegal_argument_exception",
"reason" : "The bulk request must be terminated by a newline [\n]"
},
"status" : 400
}
解決歷程
1,按照報錯更改json文件,在json文件最後加入了一個回車,增加了一個新行,執行命令,依然報相同錯
2,嘗試修改我的命令,修改後成爲:
curl -XPOST -H 'Content-Type:application/json' 'xxxx:9200/bank/account/_bulk?pretty' --data-binary "./acc.json"
因爲查到了,加載json文件時如果使用普通的-d方法加載文件會造成空行被忽略,也就是說我們加上去的新行並沒有起作用,–data-binary數據二進制格式的加載方式,可以保證我們的空行還在,但是執行之後依然報錯,相同的錯
3,有點鬱悶了,又查找一番,發現命令還存在錯誤,經修改如下:
curl -XPOST -H 'Content-Type:application/json' 'xxxx:9200/bank/account/_bulk?pretty' --data-binary "@acc.json"
發現,書寫文件路徑時,必須要以@開頭,而不是平常的./或/等,至此文件成功加載,在head中也發現了數據,完美
注:命令中最後文件路徑的雙引號不必要,–data-binary @acc.json ,也一樣可以成功執行命令