使用ElasticSearch在bulk導入json數據時,The bulk request must be terminated by a newline [\n]

問題重現

輸入命令

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 ,也一樣可以成功執行命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章