您可通过后置处理算子在向量或标量召回阶段后,对候选数据进行进一步过滤处理,如字符串匹配、频控等。
说明
后置处理算子是通用检索能力,您可以将其应用在向量近邻检索、稠密稀疏混合近邻检索等检索方式中。
说明
请求向量数据库 VikingDB 的 OpenAPI 接口时,需要构造签名进行鉴权,详细的 OpenAPI 签名调用方法请参见 API签名调用指南。
URI | /api/index/search | 统一资源标识符 |
---|---|---|
请求方法 | POST | 客户端对向量数据库服务器请求的操作类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: HMAC-SHA256 *** | 鉴权 |
在向量检索请求的基础上,您可以在 search 请求参数中指定 post_process_ops、post_process_input_limit 子参数设定后置处理算子。
参数 | 子参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
---|---|---|---|---|---|
search | post_process_ops | list<map> | 否 | 后置处理算子列表。在向量或标量召回阶段后,对候选数据进行进一步过滤处理,如字符串匹配、频控等。每个算子为一个map,串行执行。默认为空。详见下文后置处理算子。 | |
post_process_input_limit | int | 否 | 当设置了post_process_ops时,进入后置处理阶段的候选数量。默认值1000,最大值为min(1600, limit * 10)。 |
算子 | 说明 | 示例 |
---|---|---|
string_match | 正则匹配算子。仅限string类型字段使用。 |
|
enum_freq_limiter | 频控算子。仅限string类型字段使用。用于保证一次召回的结果中, 一个特定取值出现的总数不超过 |
|
参数 | 参数说明 |
---|---|
code | 状态码 |
message | 返回信息 |
request_id | 标识每个请求的唯一标识符 |
data | 检索结果,标量过滤检索会返回检索到的主键、score、fields。 |
状态码 | http状态码 | 返回信息 | 状态码说明 |
---|---|---|---|
0 | 200 | drop index success | Index 检索成功。 |
1000008 | 400 | index not exist | 指定的 Index 不存在。 |
1000003 | 400 | invalid request | 非法参数:
|
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.4, 0.5, 0.6, 0.7, 0.8, 0.9], [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 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, "partition": "default" }, "post_process_ops": [ // 后置处理算子列表,处理初步召回后的结果 { "op": "string_match", // 字符串匹配算子,适用于 string 类型字段 "field": "name", // 针对 `name` 字段进行正则过滤 "pattern": "^[0-9A-Za-z_]+$" // 仅保留匹配正则表达式的字段值 // 示例:过滤掉非字母、数字、下划线以外的 `name` 候选 }, { "op": "enum_freq_limiter", // 枚举频控算子,限制结果中某个字段值的频次 "field": "city", // 针对 `city` 字段进行频控 "threshold": 5 // 单个 `city` 字段值最多出现 5 次 // 示例:如果某个城市的候选数量超过 5,自动裁剪至 5 个 } ], "post_process_input_limit": 1000 // 后置处理阶段的最大输入数量,默认值为 1000,确保后置处理只对初步筛选的前 1000 个候选应用,提高效率 }'
执行成功返回:
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"}