适用于:SQL Server 2025 (17.x) 在Microsoft Fabric 中预览
Azure SQL 数据库
Azure SQL 托管实例
SQL 数据库
注意
该数据类型为预览版,可能会发生变化。 请务必阅读 联机服务的服务级别协议(SLA)中的预览使用条款。
使用指定的距离指标计算两个向量之间的距离。 矢量距离始终精确且不使用任何向量索引,即使可用也是如此。 若要使用矢量索引并因此执行近似矢量搜索,必须使用 VECTOR_SEARCH 函数。 若要详细了解矢量索引和矢量搜索的工作原理,以及精确搜索和近似搜索之间的差异,请参阅 SQL 数据库引擎中的矢量。
语法
VECTOR_DISTANCE ( distance_metric, vector1, vector2 )
参数
distance_metric
一个字符串,其中包含用于计算两个给定向量之间的距离的距离指标的名称。 支持以下距离指标:
-
cosine
- 余弦距离 -
euclidean
- Euclidean 距离 -
dot
- (负数) 点积
vector1
计算结果为 向量 数据类型的表达式。
vector2
计算结果为 向量 数据类型的表达式。
距离指标
跃点数 | 说明 | 范围 | 示例 |
---|---|---|---|
cosine |
余弦(角)距离 | [0, 2] |
0 :相同的向量 2 :对立向量 |
euclidean |
欧几里得距离 | [-∞, +∞] |
0 :相同的向量 |
dot |
基于点产品的距离指示, 通过计算 负 点积获取 |
[-∞, +∞] | 较小的数字表示更相似的向量 |
返回值
该函数返回一个标量浮点值,该值表示使用指定距离指标的两个向量之间的距离。
如果 distance_metric 不是有效的指标,并且提供的向 量不是矢量数据类型,则返回错误。
示例
可在此处找到示例中使用的数据库的详细信息: 使用 Vector Embedding 下载并导入维基百科文章。
示例假定存在一个表,该表具有wikipedia_articles
存储标题的维基百科文章嵌入的类型title_vector
列vector
。
title_vector
假定是使用嵌入模型(如 text-embedding-ada-002 或 text-embedding-3-small )生成的嵌入,该模型返回具有 1,536 个维度的矢量。
有关更多示例(包括端到端解决方案),请转到 Azure SQL 数据库矢量搜索示例 GitHub 存储库。
示例 1
以下示例使用 JSON 数组从字符串创建具有三个维度的向量。
DECLARE @v1 VECTOR(2) = '[1,1]';
DECLARE @v2 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;
示例 2
下面的示例根据标题向量之间的余弦距离返回与给定文章最相似的前 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
示例 3
下面的示例根据标题向量之间的余弦距离返回给定项目的所有类似文章,仅选择距离小于 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