web-dev-qa-db-ja.com

Elasticsearch Bulk API-インデックスと作成/更新

Elasticsearch Bulk API を使用してドキュメントを作成または更新しています。

実際にそれらが作成または更新されているかどうかはわかりますが、SQLの意味ですべてindex、または「アップサート」にするだけでコードを簡素化できます。

より明示的なindexcreateを使用するよりも、updateを使用する(およびESにそれを理解させる)ことには、欠点がありますか?

36
Kong

createを送信する場合、ドキュメントがインデックスにまだ存在しないことを確認する必要があります。そうでない場合、呼び出しは失敗しますが、indexで同じドキュメントを送信すると常に成功します。

次に、パフォーマンス上の理由から、ドキュメントを作成することがわかっている場合(createまたはindexのいずれか)、その後、いくつかのプロパティのみを更新し、update意味があります。

それ以外の場合、常に完全なドキュメントを送信する場合は、作成と更新の両方にindexを常に使用します。 indexアクションを検出すると、ESはドキュメントが存在しない場合は作成するか、存在する場合は置き換えますが、呼び出しは常に成功します。

60
Val

短い答え:いいえ、デメリットはありません。

作成および更新エンドポイントは特別な場合です。 createを使用すると、ドキュメントが既に存在している場合は何もしません。更新では、ドキュメントのすべてのデータがない場合に提供するデータを少なくすることができ、いくつかのフィールドを追加するだけで済みます。また、更新時にドキュメントが既に存在する場合にのみ、ドキュメントのインデックスを作成することもできます。

8

すべてにインデックスを使用することはできません。 docs によると:

インデックスは必要に応じてドキュメントを追加または置換します

また、ドキュメントを更新する場合は、「doc_as_upsert」フラグを追加する価値があるかもしれません。詳細 here および here

4
Suhas K