相似性检索
相似度检索是基于多维向量进行 相似度计算 的检索方式。相似度计算通过计算查询向量与数据库存储的向量之间的相似度,找到与查询的多维向量最相似的文档。腾讯云向量数据库(Tencent Cloud VectorDB)较全面覆盖各种相似度检索场景。您可以根据实际存储数据的特点与应用场景,选择不同的检索方式。
数据库类别 | 支持方式 |
Base Database | 支持指定多维向量数值,检索与指定的多维向量数值最相似的 Top K 条文档。 支持指定 id(Document ID),检索与该 id 的向量值最相似的 Top K 条文档。 应用 Embedding 功能,支持输入原始文本,检索与该文本信息最相似的 Top K 条文档。 支持指定 id、多维向量或原始文本,搭配标量字段的 Filter 表达式一并检索与 id、多维向量、原始文本相似的文档。 支持批量进行相似度检索,即支持输入多条向量数据值、多个 id 分别检索与每一个向量数值、每一个 id 相似的 Top K 条数据。 |
AI Database | 支持输入文本信息,在指定的文件 id(DocumentSet ID)或文件名,检索相似的文本内容。 支持指定多个文件 id(DocumentSet ID)或文件名,单次批量检索多个文件的信息,最大数量为 20 个。 支持指定标量字段的 Filter 表达式 过滤文件信息。 支持指定多个文件 id(DocumentSet ID)或文件名,并搭配标量字段的 Filter 表达式一起过滤多个文件信息。 |
精确查询
精确查询是基于标量字段(指一个单独的数值,例如文本、数值或日期等字段)精确检索具体数据的查询方式,例如,根据 id(Document ID)查询对应向量数据,或者根据文件名查询。这种查询方式适用于根据单个属性进行数据查询的场景。
数据库类别 | 精确查询支持方式 |
Base Database | 支持根据指定的 id(Document ID),检索对应的向量数据。 支持指定多个 id(Document ID),单次批量查询对应的多条数据,最大数量为20个。 支持指定标量字段的 Filter 表达式 过滤数据。 支持指定查询起始位置和返回数量,查询该范围的数据。 支持指定多个 id(Document ID),并搭配标量字段的 Filter 表达式一起过滤数据。 |
AI Database | 支持根据指定的文件 id(DocumentSet ID)或文件名,检索对应的文件信息。 支持指定多个文件 id(DocumentSet ID)或文件名,单次批量查询对应的多个文件,最大数量为20个。 支持指定标量字段的 Filter 表达式 过滤文件信息。 支持指定查询起始位置和返回数量,查询该范围的文件。 支持指定多个文件 id(DocumentSet ID)或文件名,并搭配标量字段的 Filter 表达式一起过滤数据。 |
混合检索
混合检索是基于标量字段和向量字段,搭配自定义的标量字段(具有 Document 属性的一个单独数值字段,例如 id、文本、数值或日期等)的 Filter 条件表达式 作为查询条件,综合查询文档或进行向量相似度检索。这种检索方式适用于综合多个属性进行查询的场景。
主要功能
如下为 Base 类 Database 支持使用 Filter 表达式的场景,对应 AI 类数据库 DocumentSet 级别下的操作,同样适用。
在精确查询时,支持指定 Filter 字段的条件表达式过滤需查询的文档。具体 API 接口,请参见 /document/query。
在相似度检索时,支持指定 Filter 字段的条件表达式过滤需检索的文档。具体 API 接口,请参见 /document/search。
在删除数据时,支持指定 Filter 字段的条件表达式过滤需删除的文档。具体 API 接口,请参见 /document/delete。
在更新数据时,支持指定 Filter 字段的条件表达式过滤需更新的文档。具体 API 接口,请参见 /document/update。
Filter 条件表达式
条件表达式是一种用于筛选文档的查询条件。它可以根据文档中的字段值来进行筛选。通常,条件表达式由一个或多个条件组成,每个条件包括一个字段名、一个比较运算符和一个值。
逻辑运算表达式
腾讯云向量数据库(Tencent Cloud VectorDB)所支持的逻辑运算符包括 and、or、not,如下表所示。
运算符 | 描述 | 示例 |
and | 与 | game_tag="Robert" and (video_tag="dance" or video_tag="music") |
or | 或 | game_tag="1000" or video_tag="dance" |
not | 非 | game_tag="1000" and not( video_tag="dance") |
字符串类型表达式
字符串类型的值必须要用英文双引号括起来。字符串类型可以用单值或多值匹配。腾讯云向量数据库当前所支持的运算符如下表所示。
运算符 | 描述 | 示例 |
in | 匹配任意一个字符串值 | game_tag in("Detective","Action Roguelike","Party-Based RPG","1980s") |
not in | 排除所有字符串值 | game_tag not in ("Detective") |
= | 匹配单个字符串值 | game_tag="Detective" |
!= | 排除单个字符串值 | game_tag!="Detective" |
数值类型表达式
腾讯云向量数据库标量索引字段的数值类型当前仅支持 unit64,暂不支持负数和浮点型。如有需求,可以把负数和浮点型转换成整型。所支持的运算符,如下表所示。
运算符 | 描述 | 示例 |
> | 大于 | exipred_time>1623388524 |
>= | 大于等于 | exipred_time>=1623388524 |
= | 等于 | exipred_time=1623388524 |
< | 小于 | exipred_time<1623388524 |
<= | 小于等于 | exipred_time<=1623388524 |
数组(Array)类型表达式
数据类型目前仅只是数组元素为 string 类型。具体运算符,请参见下表。
运算符 | 描述 | 示例 |
include | 包含数组元素之一 | name include (\\"Bob\\", \\"Jack\\") |
exclude | 排除数组元素之一 | name exclude (\\"Bob\\", \\"Jack\\") |
include all | 全包含数组元素 | name include all (\\"Bob\\", \\"Jack\\") |
应用示例
本文给出混合检索的请求示例,帮助您直观地了解混合检索的方式。如下示例,使用 /document/search 接口,综合检索满足
bookName
字段条件表达式("bookName in (\\"三国演义\\",\\"西游记\\")"
),与指定向量"vectors": [[0.3123,0.43,0.213]]
)最相似的 Top3 的数据。curl -i -X POST \\-H 'Content-Type: application/json' \\-H 'Authorization: Bearer account=root&api_key=A5VOgsMpGWJhUI0WmUbY********************
' \\http://10.0.X.X:80/document/search \\-d '{"database": "db-test","collection": "book-vector","search": {"vectors": [[0.3123,0.43,0.213]],"params": {"ef": 200},"retrieveVector": true,"filter": "bookName in (\\"三国演义\\",\\"西游记\\")","limit": 3}}'
最终返回满足过滤条件最相近的文档数据,结果如下所示:
说明:
每一个查询结果按照相似程度由高到低逐级排列,且均返回 Top K 条相似度计算的结果。其中,K 为 limit 设置的数值。如果检索的数据不足 K 条,则返回实际的 Document 数量。
{"code": 0,"msg": "Operation success","documents": [[{"id": "0001","vector": [0.21230000257492066,0.23000000417232514,0.21299999952316285],"score": 0.97142,"bookName": "三国演义","page": 21,"author": "罗贯中"},{"id": "0002","vector": [0.21230000257492066,0.2199999988079071,0.21299999952316285],"score": 0.96688,"bookName": "西游记","author": "吴承恩","page": 22}]]}