tossy diary

日常の記録を残す

ElasticsearchのBulk APIを使う際に注意すること

Elasticsearchではデータの登録時にBulk APIを使用して、大量データを登録することができます。 これにより、登録時のオーバヘッドが削減でき、インデックスの作成速度を大幅に向上できます。

www.elastic.co

Bulk APIで登録するときのデータ形式は以下のように設定します。

{ "index" : { "_index" : "test", "_id" : "1" } }

{ "field1" : "value1" }

ここからは、Bulk APIの使用時に注意するポイントを以下で順に説明します。

データの最終行は、改行文字で終了する必要がある

用意するデータの最終行は、改行文字を入れなくてはなりません。

The final line of data must end with a newline character \n

例えば、最終行に改行を入れない場合は、Bulk APIでの登録時に以下の400エラーが発生します。

{"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}%

登録するファイルサイズは100MB未満にする

Bulk APIの1回のリクエストで実行する場合、ElasticsearchはHTTPリクエストの最大サイズを100MBに制限しているため、100MBを超えないようファイルサイズを考慮する必要があります。

Note that Elasticsearch limits the maximum size of a HTTP request to 100mb by default so clients must ensure that no request exceeds this size.

そのため、100MBを超えるドキュメントをインデックス化する場合は、分割する必要があります。