向量操作符

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

需要帮助?

扫码添加企业微信
获得专业技术支持

企业微信二维码
🎯 快速响应💡 专业解答