Compartir a través de

VectorDistance(NoSQL 查询)

适用范围: NoSQL

返回两个指定矢量之间的相似性分数。

语法

VectorDistance(<vector_expr_1>, <vector_expr_2>, <bool_expr>, <obj_expr>)  

参数

参数 说明
vector_expr_1 float32 数组或更小的数组。
vector_expr_2 float32 数组或更小的数组。
bool_expr 一个可选布尔值,指定如何在 ORDER BY 表达式中使用计算值。 如果为 true,则使用暴力攻击。 false 的值使用在矢量属性上定义的任何索引(如果存在)。 默认值是 false
obj_expr 可选的 JSON 格式的对象文字,用于指定矢量距离计算选项。 有效的项包括 distanceFunctiondataTypesearchListSizeMultiplier

可选 obj_expr 支持的参数

参数 说明
distanceFunction 用于计算距离/相似度的指标。
dataType 矢量的数据类型。 float32int8uint8 值。 默认值是 float32
searchListSizeMultiplier 一个整数,指定执行矢量搜索时搜索列表的大小。 增加其值可以提高准确性,代价是 RU 成本和延迟。 最小值为 1,默认值为 5,最大值为 100。

distanceFunction 支持的指标包括:

  • cosine,其值范围为 -1(最不相似)到 +1(最相似)。
  • dotproduct,其值范围为 -∞ (-inf)(最不相似)到 +∞ (+inf)(最相似)。
  • euclidean,其值范围为 0(最不相似)到 +∞ (+inf)(最相似)。

返回类型

返回一个数值表达式,它用于枚举两个表达式之间的相似性分数。

示例

第一个示例显示仅包含所需参数的前 10 个矢量搜索查询。 投影一个属性,以及 VectorDistance 返回的分数。 然后,我们使用一个 ORDER BY 子句,按相似度由高到低对 VectorDistance 分数进行排序。

SELECT TOP 10 s.name, VectorDistance(c.vector1, <query_vector>)
FROM c
ORDER BY VectorDistance(c.vector1, <query_vector>)

下一个示例还包括 VectorDistance 的可选参数

SELECT TOP 10 s.name, VectorDistance(c.vector1, <query_vector>, true, {'distanceFunction':'cosine', 'dataType':'float32',})
FROM c
ORDER BY VectorDistance(c.vector1, <query_vector>, true, {'distanceFunction':'cosine', 'dataType':'float32',})

注解

  • 此函数需要注册 Azure Cosmos DB NoSQL 矢量搜索预览功能
  • 此函数受益于矢量索引
  • 如果提供 false 作为可选的 bool_expr,则使用路径上定义的矢量索引(如果存在)。 如果未在矢量路径上定义任何索引,则此函数将恢复为完全扫描,并且与使用矢量索引相比,会产生更高的 RU 费用和更高的延迟。
  • ORDER BY 子句中使用 VectorDistance 时,不需要为 ORDER BY 指定方向,因为根据使用的相似度指标,结果始终按最相似(第一个)到最不相似(最后一个)的顺序排序。
  • 结果表示为相似性分数。