web-dev-qa-db-ja.com

JSONファイルをElasticsearchにインポート/インデックス付けする

私はElasticsearchを初めて使用し、この時点まで手動でデータを入力しています。たとえば、私はこのようなことをしました:

$ curl -XPUT 'http://localhost:9200/Twitter/Tweet/1' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elastic Search"
}'

これで.jsonファイルができました。これをElasticsearchにインデックス付けします。私もこのようなことを試しましたが、成功しませんでした:

curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json

.jsonファイルをインポートするにはどうすればよいですか?マッピングが正しいことを確認するために最初に実行する必要がある手順はありますか?

72
Shawn Roller

Curlでファイルを使用する場合の正しいコマンドは次のとおりです。

curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d @lane.json

Elasticsearchはスキーマレスであるため、必ずしもマッピングは必要ありません。 jsonをそのまま送信し、デフォルトのマッピングを使用する場合、すべてのフィールドは 標準アナライザー を使用してインデックス付けおよび分析されます。

コマンドラインを介してElasticsearchとやり取りしたい場合は、 elasticshell をご覧ください。curlよりも少し便利です。

76
javanna

現在のドキュメントによると、 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html

Curlにテキストファイル入力を提供する場合、プレーンな-dの代わりに--data-binaryフラグを使用する必要があります。後者は改行を保持しません。

例:

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
24
KenH

このタイプのことのための小さなツールを作成しました https://github.com/taskrabbit/elasticsearch-dump

13
Evan

KenHの答えに追加する

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests

@requests@complete_path_to_json_fileに置き換えることができます

注:ファイルパスの前に@が重要です

7
Ram Pratap

私はjsonファイルと同じディレクトリにいることを確認し、単にこれを実行しました

curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json

したがって、同じディレクトリにいることを確認して、この方法で実行することもできます。注:コマンドのproduct/default /は、私の環境に固有のものです。省略したり、自分に関係のあるものに置き換えたりできます。

7
Gajendra D Ambi

https://www.getpostman.com/docs/environments から郵便配達員を取得するだけで、/ test/test/1/_bulk?prettyコマンドでファイルの場所を指定します。 enter image description here

6
Piyush Mittal

私はelasticsearch_loaderの著者です
この正確な問題のためにESLを書きました。

Pipでダウンロードできます:

pip install elasticsearch-loader

そして、以下を発行することにより、jsonファイルをelasticsearchにロードできます。

elasticsearch_loader --index incidents --type incident json file1.json file2.json
6
MosheZada

あなたが使用しています

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests

「リクエスト」がJSONファイルの場合、これを次のように変更する必要があります。

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json

この前に、jsonファイルにインデックスが付けられていない場合、jsonファイル内の各行の前にインデックス行を挿入する必要があります。 JQでこれを行うことができます。以下のリンクを参照してください: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html

Elasticsearchチュートリアル(shakespeareチュートリアルの例)に移動し、使用されているjsonファイルのサンプルをダウンロードしてご覧ください。各jsonオブジェクト(各個別の行)の前には、インデックス行があります。これは、jqコマンドを使用した後に探しているものです。この形式はバルクAPIを使用するために必須であり、プレーンjsonファイルは機能しません。

5
MLS

誰も言及したことはありませんが、JSONファイルには、「純粋な」JSONファイルのすべての行について、次の行が属するインデックスを指定する1行が必要です。

I.E.

{"index":{"_index":"shakespeare","_type":"act","_id":0}}
{"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}

それがなければ、何も機能せず、理由がわかりません

4
Greg Dougherty

virtualBoxとUBUNTUを使用している場合、または単にUBUNTUを使用している場合、それは有用です。

wget https://github.com/andrewvc/ee-datasets/archive/master.Zip
Sudo apt-get install unzip (only if unzip module is not installed)
unzip master.Zip
cd ee-datasets
Java -jar elastic-loader.jar http://localhost:9200 datasets/movie_db.eloader
1
sudarshan

Filesystem APIを介してElasticsearch APIを公開するコードをいくつか作成しました。

たとえば、データの明確なエクスポート/インポートを行うことをお勧めします。

私はプロトタイプelasticdriver を作成しました。 Fuse に基づいています

demo

0