向量操作符
VexDB 提供了多种操作符来执行向量之间的计算。
<->
计算两个向量之间的欧几里德距离。欧几里德距离是多维空间中向量表示的点之间的直线距离。较小的欧几里德距离表示向量之间的相似性较大,因此该运算符在查找和排序相似项目时非常有用。
SELECT array[1,1,1,1]::floatvector <-> array[2,2,2,2]::floatvector AS value;
示例
- 获取与向量 3,1,2 距离最近的前5条记录(欧氏距离):
SELECT * FROM items ORDER BY embedding <-> '[3, 1, 2]' LIMIT 5; - 获取与 id=1 的向量最接近的Top5记录(欧氏距离):
SELECT * FROM items WHERE id != 1 ORDER BY embedding <-> (SELECT embedding FROM items WHERE id = 1) LIMIT 5; - 过滤:与向量 3,1,2 距离 < 5 的所有记录(欧氏距离):
SELECT * FROM items WHERE embedding <-> '[3, 1, 2]' < 5; - 计算欧式距离但不排序:
SELECT embedding <-> '[3, 1, 2]' AS distance FROM items;
<#>
计算两个向量的负内积。内积 = -1*负内积,内积表示两个向量在相同维度上的对应分量相乘后再求和的结果,内积越大表示方向越一致。
SELECT -1 * (array[1,1,1,1]::floatvector <#> array[2,2,2,2]::floatvector) AS value;
示例
- 计算向量与查询向量的内积(<#> 是 负内积操作符,乘 -1 得到正内积):
SELECT (embedding <#> '[3, 1, 2]') * -1 AS inner_product FROM items;
<=>
计算两个向量之间的余弦距离。余弦相似度 = 1-余弦距离,比较两个向量的方向而不是它们的大小。余弦相似度的范围在 -1 到 1 之间,1 表示向量相同,0 表示无关,-1 表示向量指向相反方向。
SELECT 1 - (array[1,1,1,1]::floatvector <=>array[2,2,2,2]::floatvector) AS value;
示例
- 计算向量与查询向量的余弦相似度(余弦相似度 = 1 - 余弦距离):
SELECT 1 - (embedding <=> '[3, 1, 2]') AS cosine_similarity FROM items;
+
两个向量逐元素相加。
SELECT array[1,1,1,1]::floatvector + array[2,2,2,2]::floatvector AS value;
-
两个向量逐元素相减。
SELECT array[1,1,1,1]::floatvector - array[2,2,2,2]::floatvector AS value;
@~@
自然语言匹配操作符,用于匹配文本数据和自然语言文本,并支持返回相关性分数,仅支持在全文检索索引查询中使用。
类型支持:
- TEXT @~@ TEXT
- VARCHAR @~@ VARCHAR
- CHAR @~@ CHAR
- TEXT @~@ TEXT
- VARCHAR @~@ VARCHAR
- CHAR @~@ CHAR
@-@
关键词匹配操作符,用于匹配文本数据和关键词描述文本,仅支持在全文检索索引查询中使用。
关键词描述文本格式keywords为'<kw>[ AND/OR <keywords>]'或者'(<keywords>)',支持关键词间AND/OR关系和括号。
类型支持:
- TEXT @-@ TEXT
- VARCHAR @-@ VARCHAR
- CHAR @-@ CHAR
- TEXT @-@ TEXT
- VARCHAR @-@ VARCHAR
- CHAR @-@ CHAR
