ElasticsearchのBulk APIを使う際に注意すること
Elasticsearchではデータの登録時にBulk APIを使用して、大量データを登録することができます。 これにより、登録時のオーバヘッドが削減でき、インデックスの作成速度を大幅に向上できます。
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を超えるドキュメントをインデックス化する場合は、分割する必要があります。