You need to enable JavaScript to run this app.
导航
后置处理算子
最近更新时间:2025.02.07 17:51:21首次发布时间:2025.02.07 17:51:21

您可通过后置处理算子在向量或标量召回阶段后,对候选数据进行进一步过滤处理,如字符串匹配、频控等。

说明

后置处理算子是通用检索能力,您可以将其应用在向量近邻检索稠密稀疏混合近邻检索等检索方式中。

请求接口

说明

请求向量数据库 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类型字段使用。
正则匹配规则请参考:Syntax

{
   "op": "string_match",
   "field": "name",
   "pattern": "^[0-9A-Za-z_]+$"
}

enum_freq_limiter

频控算子。仅限string类型字段使用。用于保证一次召回的结果中, 一个特定取值出现的总数不超过 threshold 次。

{
  "op": "enum_freq_limiter",
  "field": "city"
  "threshold": 5
}

响应消息

参数

参数说明

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"}