/index/search 接口用于实现检索,本页面主要介绍如何实现标量过滤检索。
标量过滤检索是指在向量数据库中,同时使用向量检索和标量检索两种方法进行检索。在标量过滤检索中,使用向量检索来匹配向量的相似度,同时可以使用标量检索来匹配数据的标量值进行过滤。
说明
Collection 数据写入/删除后,Index 数据更新时间最长滞后 20s,不能立即在 Index 检索到。
说明
请求向量数据库 VikingDB 的 OpenAPI 接口时,需要构造签名进行鉴权,详细的 OpenAPI 签名调用方法请参见 API签名调用指南。
URI | /api/index/search | 统一资源标识符 |
---|---|---|
请求方法 | POST | 客户端对向量数据库服务器请求的操作类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: HMAC-SHA256 *** | 鉴权 |
参数 | 子参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
---|---|---|---|---|---|
collection_name/collection_alias | string | 是 | 指定检索的 Index 所属的 Collection 名称/别名。
| ||
index_name | string | 是 | 指定检索的 Index 名称。
| ||
search | order_by_vector | map | 是 | 根据向量距离做检索,可选值如下,vectors 和 primary_keys 二选一:
注意 索引类型为 hnsw_hybrid的索引暂不支持 primary_keys 检索。 | |
filter | map | 是 | 过滤条件,详见 filter 表达式说明。
| ||
limit | int | 否 | 10 | 检索结果数量,最大5000个。 | |
dense_weight | float | 否 | 0.5 | 混合检索中稠密向量的权重,1 表示纯稠密检索 ,0表示纯字面检索。 | |
partition | string/int | 否 | "default" | 子索引名称,类型与 partition_by 的 field_type 一致,字段值对应 partition_by 的 field_value。
| |
output_fields | list<string> | 否 | 过滤字段,指定要返回的标量或向量字段列表。
如果索引的距离方式为cosine,向量字段返回的向量是归一化后的向量。 |
算子 | 算子说明 | 示例 |
---|---|---|
must | 针对指定字段名生效,语义为必须在 [...] 之中,即 "must in"。 |
|
must_not | 针对指定字段名生效,语义为必须不在 [...] 之中,即 "must not in"。 |
|
range | 针对指定字段名生效,语义为必须在指定范围内。 |
|
range_out | 针对指定字段名生效,语义为必须在指定范围外。配置使用 |
|
and | 逻辑算子,针对逻辑查询需求,对多个条件取交集。 |
|
or | 逻辑算子,针对逻辑查询需求,对多个条件取并集。 |
|
参数 | 参数说明 |
---|---|
code | 状态码 |
message | 返回信息 |
request_id | 标识每个请求的唯一标识符 |
data | 检索结果,标量过滤检索会返回检索到的主键、score、fields。 |
状态码 | http状态码 | 返回信息 | 状态码说明 |
---|---|---|---|
0 | 200 | drop index success | Index 检索成功。 |
1000008 | 400 | index not exist | 指定的 Index 不存在。 |
1000003 | 400 | invalid request:%s | 非法参数:
|
1000001 | 401 | unauthorized | 请求头中缺乏鉴权信息。 |
1000002 | 403 | no permission | 权限不足。 |
1000016 | 400 | invalid vectors for index_recall | 输入的向量格式不合法。 |
1000029 | 429 | 请求已达上限, 请调整CPU核数 | 需要调大 cpu_quota |
curl -i -X POST \ -H 'Content-Type: application/json' \ -H 'Authorization: HMAC-SHA256 ***' \ https://api-vikingdb.volces.com/api/index/search \ -d '{ "collection_name": "test_name", "index_name": "index_test", "search": { "order_by_vector": { "vectors": [ [0.1, 0.2, 0.3......0.9], [0.01, 0.02, 0.03......0.09], ], "sparse_vectors": [ {"什么": 0.34, "是": 0.03, "B": 0.11, "M":0.32, "25": 0.03}, {"一": 0.08, "种": 0.14, " 信息": 0.19, " 检索": 0.63, " 算法":0.97} ] }, "limit": 2, "dense_weight": 0.5, "filter": { "op": "must", "field": "region", "conds": ["cn", "sg"] } "partition": "china" //子索引名称,对应 field 的值。 } }'
执行成功返回:
HTTP/1.1 200 OK Content-Length: 43 Content-Type: application/json { "code":0, "msg":"search success", "request_id":"021695029757920fd001de6666600000000000000000002569b8f", "data": [ [ { "id": 1, "score": 0.99, "fields": { "time": 1690529704, "author": "zhangsan" } }, { "id": 2, "score": 0.98, "fields": { "time": 1690529701, "author": "lisi" } } ], [ { "id": 9, "score": 0.95, "fields": { "time": 1690529708, "author": "wangwu" } }, { "id": 8, "score": 0.84, "fields": { "time": 1690529710, "author": "zhaoliu" } } ] ] }
执行失败返回:
HTTP/1.1 400 OK Content-Length: 43 Content-Type: application/json {"code":1000008, "msg":"index not exist", "request_id":"021695029757920fd001de6666600000000000000000002569b8f"}