web-dev-qa-db-ja.com

elasticsearch 6.1.1で一括リクエストがエラーをスローします

私は最近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で送信すると正常に機能します。ファイルの最後に改行文字と改行文字を追加してみました。うまくいかないようです。

11
Judy T Raj

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が原因でこの問題に直面しました。

12
Utsav

エラーはかなり明確です:

The bulk request must be terminated by a newline [\n]

したがって、customers_full.jsonファイルの最後に改行を追加するだけで大​​丈夫です。

7
Val

私は同じ問題に遭遇し、誰かが指摘する前に改行を追加して削除するのに何時間も費やしました...ファイルが実際に存在しない場合、curlは同じエラーをスローすることに注意してください。

3
Raya Fratkina

jsonファイルを開いて、ファイルの最後に移動し(Ctrl + end)、Enterを押して新しい行を分割するだけです。

1
user6589750

Elasticsearch 7.で作業しているときに同様の問題がありました。

これが私がそれを解決した方法です

  1. .jsonファイル、たとえばproducts.jsonファイルを見つけます。
  2. テキストエディターで.jsonファイルをダブルクリックして開きます。
  3. .jsonファイルの最後までスクロールし、キーボードのEnterキーを押します。
  4. .jsonファイルを閉じます。これにより、.jsonファイルの最後に新しい行が作成されます。
  5. 端末に戻り、以下のコマンドを実行します。

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"

それで全部です。

これが役立つことを願っています

1
Promise Preston

Jsonファイル内の行の最後でEnterを押して、コマンドを再度実行します。

curl -H "Content-Type:application/x-ndjson" -XPOST 'localhost:9200/customers/personal/_bulk?pretty&refresh' --data-binary @ "generated.json"

1

Curlリクエストでは、-dの代わりに--data-binaryを使用する必要があります。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html をご覧ください

1
Karim

Postmanを使用してElasticSearchにリクエストを送信する人向け

Enterキーを押すと、空の新しい行が作成されます。

そして出来上がり、問題解決

1
bnahayo

これは私のローカル設定で機能しました。

curl -H "Content-type:application/json" -XPOST " http:// localhost:9200/customer/personal/_bulk?pretty " --data-binary @ "generated.json"

0
meol

これは私のために働いた:

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"
0
Rajat Goel