定義
バージョン8.3の新機能。
$similarityEuclidean配列または
binData値として表される 2 つの数値ベクトル間のユークリッド距離を返します。ユークリッド距離は、ベクトル空間内の 2 点間の直線距離を測定します。$similarityEuclideanには 2 つの構文形式があります。簡潔な構文では、以下のように未加工のユークリッド距離が返されます。
{ $similarityEuclidean: [ <vector1>, <vector2> ] } 完全な構文は任意の正規化パラメータを受け入れます。
{ $similarityEuclidean: { vectors: [ <vector1>, <vector2> ], score: <boolean> } } 完全な構文を使用する場合、
$similarityEuclideanは次のフィールドを受け入れます。フィールドタイプ必要性説明vectors配列
必須
正確に 2 つの式の配列。各式は、数値の配列または
binData値に解決される必要があります。どちらのベクトルの長さは等しくなければなりません。scoreブール値
任意
trueの場合、 は式1 / (1 + distance)を使用して、範囲(0, 1]内の正規化されたスコアを返します。同じベクトルは1のスコアを生成します。デフォルトはfalseです。式の詳細については、「 式 」を参照してください。
動作
null および欠損値
null引数が に解決されるか、欠落しているフィールドを参照する場合、$similarityEuclidean nullは を返します。
戻り値
は$similarityEuclidean doubleを返します。 がscorefalse (デフォルトの)の場合、結果は未加工のユークリッド距離で、常に0 以上になります。距離が0 であれば、ベクトルは同一であることを意味します。値が大きいほど、相違は大きくなります。
score が true の場合、結果は式 1 / (1 + distance) を使用して範囲 (0, 1] に正規化されます。
1は、ベクトルが同一であることを示します(距離は0)。値が
0に近づくほど、相違が大きくなります。
Errors
$similarityEuclidean は、次の場合にエラーを返します。
どちらの引数も配列または
binData値に解決されません。入力配列または
binData値の長さは異なります。どちらの配列にも数値以外の要素が含まれています。
例
次の例では、vectorsコレクションを使用しています。
db.vectors.insertMany( [ { _id: 1, a: [1, 2, 3], b: [1, 2, 3] }, { _id: 2, a: [1, 2, 3], b: [3, 2, 1] }, { _id: 3, a: [1, 2, 3], b: [4, 5, 6] } ] )
次の集計パイプラインでは、各ドキュメントの a フィールドと b フィールド間のユークリッド距離を計算し、未加工の距離と正規化されたスコアの両方を返します。
db.vectors.aggregate( [ { $project: { raw: { $similarityEuclidean: [ "$a", "$b" ] }, normalized: { $similarityEuclidean: { vectors: [ "$a", "$b" ], score: true } } } } ] )
この操作は次の結果を返します。
{ _id: 1, raw: 0, normalized: 1 } { _id: 2, raw: 2.8284271247461903, normalized: 0.2612038749637415 } { _id: 3, raw: 5.196152422706632, normalized: 0.16139702886038895 }