适用于:SQL Server 2025 (17.x) 在
Microsoft Fabric 预览版中预览
Azure SQL 数据库
Azure SQL 托管实例 SQL 数据库
该 VECTOR_DISTANCE 函数使用指定的距离指标计算两个向量之间的距离。 矢量距离始终精确且不使用任何向量索引,即使可用也是如此。 若要使用矢量索引并因此执行近似矢量搜索,必须使用 VECTOR_SEARCH 函数。 若要详细了解矢量索引和矢量搜索的工作原理,以及精确搜索和近似搜索之间的差异,请参阅 SQL 数据库引擎中的矢量。
Note
VECTOR_DISTANCE 在具有 SQL Server 2025 或 Always-up-to-date更新策略的 Azure SQL 托管实例中可用。
Syntax
VECTOR_DISTANCE ( distance_metric , vector1 , vector2 )
Arguments
distance_metric
一个字符串,其中包含用于计算两个给定向量之间的距离的距离指标的名称。 支持以下距离指标:
-
cosine- 余弦距离 -
euclidean- Euclidean 距离 -
dot- (负数) 点积
vector1
计算结果为 向量 数据类型的表达式。
vector2
计算结果为 向量 数据类型的表达式。
距离指标
| Metric | Description | Range | Examples |
|---|---|---|---|
cosine |
余弦(角)距离 | [0, 2] |
0:相同的向量2:对立向量 |
euclidean |
Euclidean 距离 | [0、+∞] |
0:相同的向量 |
dot |
基于点产品的距离指示, 通过计算 负 点积获取 |
[-∞, +∞] | 较小的数字表示更相似的向量 |
返回值
该函数返回一个标量浮点值,该值表示使用指定距离指标的两个向量之间的距离。
如果 distance_metric 不是有效的指标,并且提供的向 量不是矢量数据类型,则返回错误。
Examples
可以在 GitHub 上找到示例中使用的数据库的详细信息: 使用 Vector Embedding 下载和导入维基百科文章。
示例假定存在一个表,该表具有wikipedia_articles存储标题的维基百科文章嵌入的类型title_vector列vector。
title_vector 假定是使用嵌入模型生成的嵌入,例如 text-embedding-ada-002 ,或 text-embedding-3-small返回具有 1,536 个维度的向量。
有关更多示例(包括端到端解决方案),请转到 Azure SQL 数据库矢量搜索示例 GitHub 存储库。
答: 从 JSON 数组创建矢量
以下示例使用 JSON 数组从字符串创建具有三个维度的向量。
DECLARE @v1 AS VECTOR (2) = '[1,1]';
DECLARE @v2 AS VECTOR (2) = '[-1,-1]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2) AS euclidean,
VECTOR_DISTANCE('cosine', @v1, @v2) AS cosine,
VECTOR_DISTANCE('dot', @v1, @v2) AS negative_dot_product;
B. 基于标题返回前 10 篇类似文章
下面的示例根据标题向量之间的余弦距离返回与给定文章最相似的前 10 篇文章。
DECLARE @v AS VECTOR (1536);
SELECT @v = title_vector
FROM [dbo].[wikipedia_articles]
WHERE title = 'Alan Turing';
SELECT TOP (10) id,
title,
VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM [dbo].[wikipedia_articles]
ORDER BY distance;
C. 基于特定矢量距离返回类似文章
下面的示例根据标题向量之间的余弦距离返回给定项目的所有类似项目,仅选择距离小于 0.3 的游戏。
DECLARE @v AS VECTOR (1536);
SELECT @v = title_vector
FROM [dbo].[wikipedia_articles]
WHERE title = 'Alan Turing';
SELECT id,
title,
VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM [dbo].[wikipedia_articles]
WHERE VECTOR_DISTANCE('cosine', @v, title_vector) < 0.3
ORDER BY distance;