私は最近Elasticsearchバージョン6.1.1にアップグレードしましたが、jsonファイルからドキュメントのバルクインデックスを作成できません。 Wehn私はそれをインラインで行います、それはうまく働きます。ドキュメントの内容は次のとおりです。
{"index" : {}}
{"name": "Carlson Barnes", "age": 34}
{"index":{}}
{"name": "Sheppard Stein","age": 39}
{"index":{}}
{"name": "Nixon Singleton","age": 36}
{"index":{}}
{"name": "Sharron Sosa","age": 33}
{"index":{}}
{"name": "Kendra Cabrera","age": 24}
{"index":{}}
{"name": "Young Robinson","age": 20}
このコマンドを実行すると、
curl -XPUT 'localhost:9200/subscribers/ppl/_bulk?pretty' -H 'Content-Type: application/json' -d @customers_full.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
データをインラインおよびelasticsearch 5.xで送信すると正常に機能します。ファイルの最後に改行文字と改行文字を追加してみました。うまくいかないようです。
JSONファイルの最後にempty行を追加してファイルを保存してから、以下のコマンドを実行してください
curl -XPOST localhost:9200/subscribers/ppl/_bulk?pretty --data-binary @customers_full.json -H 'Content-Type: application/json'
私はそれがあなたのためにうまく働くことを望みます。
ドキュメントが言うように:
プレーン--data-binary
の代わりに-d
フラグを使用
-d
は改行を保持しませんおよびjsonをフォーマットしない。
JSON formatが原因でこの問題に直面しました。
エラーはかなり明確です:
The bulk request must be terminated by a newline [\n]
したがって、customers_full.json
ファイルの最後に改行を追加するだけで大丈夫です。
私は同じ問題に遭遇し、誰かが指摘する前に改行を追加して削除するのに何時間も費やしました...ファイルが実際に存在しない場合、curlは同じエラーをスローすることに注意してください。
jsonファイルを開いて、ファイルの最後に移動し(Ctrl + end)、Enterを押して新しい行を分割するだけです。
Elasticsearch 7.で作業しているときに同様の問題がありました。
これが私がそれを解決した方法です
.json
ファイル、たとえばproducts.json
ファイルを見つけます。.json
ファイルをダブルクリックして開きます。.json
ファイルの最後までスクロールし、キーボードのEnterキーを押します。.json
ファイルを閉じます。これにより、.json
ファイルの最後に新しい行が作成されます。N/B:以下のコマンドの場合、.json
ファイル名はproducts.json
で、これをhttp://localhost:9200/ecommerce/product
にインポートしています
curl -H "Content-type: application/json" -XPOST "http://localhost:9200/ecommerce/product/_bulk?pretty" --data-binary "@products.json"
それで全部です。
これが役立つことを願っています
Jsonファイル内の行の最後でEnterを押して、コマンドを再度実行します。
curl -H "Content-Type:application/x-ndjson" -XPOST 'localhost:9200/customers/personal/_bulk?pretty&refresh' --data-binary @ "generated.json"
Curlリクエストでは、-dの代わりに--data-binaryを使用する必要があります。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html をご覧ください
Postmanを使用してElasticSearchにリクエストを送信する人向け
Enterキーを押すと、空の新しい行が作成されます。
そして出来上がり、問題解決
これは私のローカル設定で機能しました。
curl -H "Content-type:application/json" -XPOST " http:// localhost:9200/customer/personal/_bulk?pretty " --data-binary @ "generated.json"
これは私のために働いた:
curl -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@C:\Program Files\Elastic\Elasticsearch\7.2.0\accounts.json"