Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

$similarityEuclidean(表达式操作符)

8.3版本新增

$similarityEuclidean

返回以数组或 binData 值表示的两个数值向量之间的欧几里得距离。欧几里得距离测量向量空间中两点之间的直线距离。

$similarityEuclidean 有两种语法形式。

简洁语法返回原始欧几里得距离:

{ $similarityEuclidean: [ <vector1>, <vector2> ] }

完整语法接受可选的规范化参数:

{
$similarityEuclidean: {
vectors: [ <vector1>, <vector2> ],
score: <boolean>
}
}

使用完整语法时,$similarityEuclidean 接受以下字段:

字段
类型
必要性
说明

vectors

阵列

必需

恰好包含两个表达式的数组。每个表达式必须解析为一个数值大量或一个 binData 值。两个向量必须具有相同的长度。

score

布尔

Optional

true 时,使用公式 1 / (1 + distance) 返回 (0, 1]范围内的规范化分数。相同的向量产生的分数为 1。默认为 false

有关表达式的更多信息,请参阅表达式。

如果任一参数解析为null 或引用缺失字段,则$similarityEuclidean null会返回 。

$similarityEuclidean会返回double 。当scorefalse (默认)时,结果为原始欧几里得距离,且始终大于或等于0 。距离为0 表示向量相同。值越大表示差异越大。

scoretrue 时,使用公式 1 / (1 + distance) 将结果标准化为范围(0, 1]

  • 1 表示向量相同(距离为 0)。

  • 值接近 0 表示差异更大。

$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] }
] )

以下聚合管道计算每个文档的 ab 字段之间的欧几里得距离,并返回原始距离和归一化分数:

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 }

后退

$similarityDotProduct

在此页面上