后置处理算子是 VikingDB 提供的一种检索后处理能力,用于在向量召回之后,对候选数据进行进一步的过滤和优化,确保最终返回的搜索结果更加精准、高效。
在 VikingDB 中,后置处理算子可用于:
后置处理算子是通用检索能力,您可以将其应用在基本向量检索、稠密稀疏混合检索中。
参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
|---|---|---|---|---|
postProcessOps | list | 否 | 后置处理算子列表。在向量或标量召回阶段后,对候选数据进行进一步过滤处理,如字符串匹配、频控等。每个算子为一个map,串行执行。默认为空。详见下文后置处理算子。 | |
postProcessInputLimit | int | 否 | 1000 | 当设置了 postProcessOps 时,进入后置处理阶段的候选数量。必须大于 0,实际候选数不超过 |
算子 | 说明 | 示例 |
|---|---|---|
string_match | 正则匹配算子。仅限string类型字段使用。 |
|
string_contain | 关键词匹配算子。仅限string类型字段使用。 |
|
enum_freq_limiter | 频控算子。仅限string类型字段使用。 |
|
运行以下示例前,请根据实际环境完成依赖安装和参数配置,并替换代码中的示例值。
// 获取指定索引,程序初始化时调用即可,无需重复调用 index, _ := service.GetIndex("<YOUR_COLLECTION_NAME>", "<YOUR_INDEX_NAME>")
filter := map[string]interface{}{ "op": "range", "field": "f_int64", "gt": 10, } searchOpt := vikingdb.NewSearchOptions().SetFilter(filter).SetLimit(15). SetPostProcessOps([]map[string]interface{}{ {"op": "enum_freq_limiter", "field": "f_string", "threshold": 1}, {"op": "string_contain", "field": "f_string", "pattern": "doc2%"}, }). SetPostProcessInputLimit(10). SetRetry(true) datas, err := index.Search(nil, searchOpt) if err != nil { panic(err) } for _, data := range datas { fmt.Println(data.Fields, data.Score) }
Go 调用执行上面的任务,返回 List
属性 | 说明 |
|---|---|
Id | 主键 id。 |
Fields | 请求返回中的 fields 字段,是具体的数据,map 类型。 |
Score | 表示找到的向量和输入的向量的匹配程度。 |
| 字段 | 类型 | 必填 | 含义 |
|---|---|---|---|
op | string | 是 | 算子名称。 |
field | string | 是 | 参与后处理的字段名。 |
pattern | string | 字符串匹配算子必填 | 匹配模式或待匹配文本。 |
threshold | number | 阈值类算子必填 | 过滤或截断阈值。 |
已将 enum_freq_limiter 示例修正为合法 JSON:"field": "city", 后再书写下一字段。