天天看點

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

繼續閱讀