检索与 Filter 表达

最近更新时间:2024-09-27 18:00:11

我的收藏

检索方式

检索方法
解释
功能明细
相似性检索
基于多维向量进行 相似度计算 的检索方式,通过计算查询向量与数据库存储的向量之间的相似度,找到与查询的多维向量最相似的文档。
支持指定多维向量数值,检索与指定的多维向量数值最相似的 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 字段的条件表达式过滤需删除的文档。
在更新数据时,支持指定 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
}
]
]
}