Elasticsearch Bulk API を使用してドキュメントを作成または更新しています。
実際にそれらが作成または更新されているかどうかはわかりますが、SQLの意味ですべてindex
、または「アップサート」にするだけでコードを簡素化できます。
より明示的なindex
とcreate
を使用するよりも、update
を使用する(およびESにそれを理解させる)ことには、欠点がありますか?
create
を送信する場合、ドキュメントがインデックスにまだ存在しないことを確認する必要があります。そうでない場合、呼び出しは失敗しますが、index
で同じドキュメントを送信すると常に成功します。
次に、パフォーマンス上の理由から、ドキュメントを作成することがわかっている場合(create
またはindex
のいずれか)、その後、いくつかのプロパティのみを更新し、update
意味があります。
それ以外の場合、常に完全なドキュメントを送信する場合は、作成と更新の両方にindex
を常に使用します。 index
アクションを検出すると、ESはドキュメントが存在しない場合は作成するか、存在する場合は置き換えますが、呼び出しは常に成功します。
短い答え:いいえ、デメリットはありません。
作成および更新エンドポイントは特別な場合です。 createを使用すると、ドキュメントが既に存在している場合は何もしません。更新では、ドキュメントのすべてのデータがない場合に提供するデータを少なくすることができ、いくつかのフィールドを追加するだけで済みます。また、更新時にドキュメントが既に存在する場合にのみ、ドキュメントのインデックスを作成することもできます。