检索方式
检索方法 | 解释 | 功能明细 |
相似性检索 | 支持指定多维向量数值,检索与指定的多维向量数值最相似的 Top K 条文档。 支持指定 id(Document ID),检索与该 id 的向量值最相似的 Top K 条文档。 支持输入原始文本,检索与该文本信息最相似的 Top K 条文档。 支持指定 id、多维向量或原始文本,搭配标量字段的 Filter 表达式一并检索与 id、多维向量、原始文本相似的文档。 支持批量进行相似度检索,即支持输入多条向量数据值、多个 id 分别检索与每一个向量数值、每一个 id 相似的 Top K 条数据。 | |
精确查询 | 基于数据的标量字段(指一个单独的数值,例如文本、数值或日期等字段),精确检索具体数据的查询方式。例如,根据 id(Document ID)查询对应向量数据,或者根据文件名查询。适用于根据单个属性进行数据查询的场景。 | 支持根据指定的文件 id(DocumentSet ID)或文件名,检索对应的文件信息。 支持指定多个文件 id(DocumentSet ID)或文件名,单次批量查询对应的多个文件,最大数量为20个。 支持指定标量字段的 Filter 表达式 过滤文件信息。 支持指定查询起始位置和返回数量,查询该范围的文件。 支持指定多个文件 id(DocumentSet ID)或文件名,并搭配标量字段的 Filter 表达式一起过滤数据。 |
过滤检索 | 在精确查询时,支持指定 Filter 字段的条件表达式过滤需查询的文档。 在相似度检索时,支持指定 Filter 字段的条件表达式过滤需检索的文档。 在删除数据时,支持指定 Filter 字段的条件表达式过滤需删除的文档。 在更新数据时,支持指定 Filter 字段的条件表达式过滤需更新的文档。 | |
混合检索 | 支持稠密向量Dense vector + 稀疏向量 Sparse vector混合检索双路召回。Sparse vector通过BM25算法完成分数计算达到类关键字检索效果,进一步提升业务召回效果,弥补在语义检索中对具体数字、编码、数学公式等不敏感以及语义过度泛化的问题。 | 支持文本内容转化稀疏向量表示。 支持RFF、Weight两路权重合并排序。 |
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}]]}