Skip to content

Latest commit

 

History

History
317 lines (228 loc) · 13.6 KB

File metadata and controls

317 lines (228 loc) · 13.6 KB
title 向量函数与运算符
summary 了解可用于向量数据类型的函数与运算符。
aliases
/zh/tidb/stable/vector-search-functions-and-operators/
/zh/tidb/dev/vector-search-functions-and-operators/
/zh/tidbcloud/vector-search-functions-and-operators/

向量函数与运算符

本文档列出了可用于向量数据类型的函数与运算符。

注意:

  • 向量函数与运算符目前为 Beta 版本,可能会在未提前通知的情况下发生变更。如果你发现了 bug,可以在 GitHub 上提交 issue
  • 向量数据类型及这些向量函数适用于 TiDB 自托管TiDB Cloud StarterTiDB Cloud EssentialTiDB Cloud Dedicated。对于 TiDB 自托管和 TiDB Cloud Dedicated,TiDB 版本需为 v8.4.0 或更高(推荐 v8.5.0 或更高)。

向量函数

以下函数专为 向量数据类型 设计。

向量距离函数:

函数名 描述 向量索引支持
VEC_L2_DISTANCE 计算两个向量之间的 L2 距离(欧氏距离)
VEC_COSINE_DISTANCE 计算两个向量之间的余弦距离
VEC_NEGATIVE_INNER_PRODUCT 计算两个向量内积的相反数
VEC_L1_DISTANCE 计算两个向量之间的 L1 距离(曼哈顿距离)

其他向量函数:

函数名 描述
VEC_DIMS 返回向量的维度
VEC_L2_NORM 计算向量的 L2 范数(欧氏范数)
VEC_FROM_TEXT 将字符串转换为向量
VEC_AS_TEXT 将向量转换为字符串

扩展内置函数与运算符

以下内置函数与运算符已扩展以支持对 向量数据类型 的操作。

算术运算符:

名称 描述
+ 向量按元素加法运算符
- 向量按元素减法运算符

关于向量算术运算的更多信息,参见 向量数据类型 | 算术运算

聚合(GROUP BY)函数:

名称 描述
COUNT() 返回结果行数
COUNT(DISTINCT) 返回不同值的数量
MAX() 返回最大值
MIN() 返回最小值

比较函数与运算符:

名称 描述
BETWEEN ... AND ... 检查值是否在某个范围内
COALESCE() 返回第一个非空值参数
= 等于运算符
<=> NULL 安全等于运算符
> 大于运算符
>= 大于等于运算符
GREATEST() 返回最大参数
IN() 检查值是否在某个集合中
IS NULL 测试值是否为 NULL
ISNULL() 测试参数是否为 NULL
LEAST() 返回最小参数
< 小于运算符
<= 小于等于运算符
NOT BETWEEN ... AND ... 检查值是否不在某个范围内
!=, <> 不等于运算符
NOT IN() 检查值是否不在某个集合中

关于向量比较的更多信息,参见 向量数据类型 | 比较

流程控制函数:

名称 描述
CASE CASE 运算符
IF() if/else 结构
IFNULL() null if/else 结构
NULLIF() 如果 expr1 = expr2 则返回 NULL

类型转换函数:

名称 描述
CAST() 将值转换为字符串或向量
CONVERT() 将值转换为字符串

关于如何使用 CAST() 的更多信息,参见 向量数据类型 | 类型转换

完整参考

VEC_L2_DISTANCE

VEC_L2_DISTANCE(vector1, vector2)

使用以下公式计算两个向量之间的 L2 距离(欧氏距离):

$DISTANCE(p,q)=\sqrt {\sum \limits {i=1}^{n}{(p{i}-q_{i})^{2}}}$

两个向量必须具有相同的维度,否则会返回错误。

示例:

SELECT VEC_L2_DISTANCE('[0, 3]', '[4, 0]');
+-------------------------------------+
| VEC_L2_DISTANCE('[0, 3]', '[4, 0]') |
+-------------------------------------+
|                                   5 |
+-------------------------------------+

VEC_COSINE_DISTANCE

VEC_COSINE_DISTANCE(vector1, vector2)

使用以下公式计算两个向量之间的 余弦距离

$DISTANCE(p,q)=1.0 - {\frac {\sum \limits {i=1}^{n}{p{i}q_{i}}}{{\sqrt {\sum \limits {i=1}^{n}{p{i}^{2}}}}\cdot {\sqrt {\sum \limits {i=1}^{n}{q{i}^{2}}}}}}$

两个向量必须具有相同的维度,否则会返回错误。

对于来自 OpenAI 的 embedding,推荐使用此函数。

示例:

SELECT VEC_COSINE_DISTANCE('[1, 1]', '[-1, -1]');
+-------------------------------------------+
| VEC_COSINE_DISTANCE('[1, 1]', '[-1, -1]') |
+-------------------------------------------+
|                                         2 |
+-------------------------------------------+

VEC_NEGATIVE_INNER_PRODUCT

VEC_NEGATIVE_INNER_PRODUCT(vector1, vector2)

使用以下公式,通过计算两个向量 内积 的相反数来计算距离:

$DISTANCE(p,q)=- INNER_PROD(p,q)=-\sum \limits {i=1}^{n}{p{i}q_{i}}$

两个向量必须具有相同的维度,否则会返回错误。

示例:

SELECT VEC_NEGATIVE_INNER_PRODUCT('[1, 2]', '[3, 4]');
+------------------------------------------------+
| VEC_NEGATIVE_INNER_PRODUCT('[1, 2]', '[3, 4]') |
+------------------------------------------------+
|                                            -11 |
+------------------------------------------------+

VEC_L1_DISTANCE

VEC_L1_DISTANCE(vector1, vector2)

使用以下公式计算两个向量之间的 L1 距离(曼哈顿距离):

$DISTANCE(p,q)=\sum \limits {i=1}^{n}{|p{i}-q_{i}|}$

两个向量必须具有相同的维度,否则会返回错误。

示例:

SELECT VEC_L1_DISTANCE('[0, 0]', '[3, 4]');
+-------------------------------------+
| VEC_L1_DISTANCE('[0, 0]', '[3, 4]') |
+-------------------------------------+
|                                   7 |
+-------------------------------------+

VEC_DIMS

VEC_DIMS(vector)

返回向量的维度。

示例:

SELECT VEC_DIMS('[1, 2, 3]');
+-----------------------+
| VEC_DIMS('[1, 2, 3]') |
+-----------------------+
|                     3 |
+-----------------------+
SELECT VEC_DIMS('[]');
+----------------+
| VEC_DIMS('[]') |
+----------------+
|              0 |
+----------------+

VEC_L2_NORM

VEC_L2_NORM(vector)

使用以下公式计算向量的 L2 范数(欧氏范数):

$NORM(p)=\sqrt {\sum \limits {i=1}^{n}{p{i}^{2}}}$

示例:

SELECT VEC_L2_NORM('[3, 4]');
+-----------------------+
| VEC_L2_NORM('[3, 4]') |
+-----------------------+
|                     5 |
+-----------------------+

VEC_FROM_TEXT

VEC_FROM_TEXT(string)

将字符串转换为向量。在许多场景下,此转换会被隐式执行,例如向 VECTOR 数据类型的列插入数据时。然而,在某些不支持隐式转换的表达式中(如向量的算术运算),你需要显式调用此函数。

示例:

SELECT VEC_FROM_TEXT('[1, 2]') + VEC_FROM_TEXT('[3, 4]');
+-------------------------------------------------+
| VEC_FROM_TEXT('[1,2]') + VEC_FROM_TEXT('[3,4]') |
+-------------------------------------------------+
| [4,6]                                           |
+-------------------------------------------------+

VEC_AS_TEXT

VEC_AS_TEXT(vector)

将向量转换为字符串。

示例:

SELECT VEC_AS_TEXT('[1.000, 2.5]');
+-----------------------------+
| VEC_AS_TEXT('[1.000, 2.5]') |
+-----------------------------+
| [1,2.5]                     |
+-----------------------------+

MySQL 兼容性

向量函数以及内置函数和运算符在向量数据类型上的扩展用法为 TiDB 特有,MySQL 不支持。

另请参阅