你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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 成本和延迟。 Min=1,Default=5,Max=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'})

重要

始终在查询的 SELECT 语句中使用 TOP N 子句。 否则,矢量搜索将尝试返回明显更多的结果,这将导致查询使用更多的 RU,并且会产生比实际所需更高的延迟。

注解

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