检索功能由多个接口组成,分别对应不同的检索模式和业务场景。
| V2接口 | V1接口 | |
|---|---|---|
向量检索 | SearchByVector | https://www.volcengine.com/docs/84313/1419285 |
稠密稀疏向量混合检索 | SearchByVector, | https://www.volcengine.com/docs/84313/1419286 |
向量检索下支持张量重排 | SearchByVector | 不支持 |
多模态检索 | SearchByMultiModal | https://www.volcengine.com/docs/84313/1419288 |
多模态检索下支持张量重排 | SearchByMultiModal | 不支持 |
主键检索 | SearchByID | https://www.volcengine.com/docs/84313/1419285 |
标量排序检索 | SearchByScalar | https://www.volcengine.com/docs/84313/1419287 |
随机检索 | SearchByRandom | https://www.volcengine.com/docs/84313/1578505 |
| 关键词检索 | SearchByKeywords | 不支持 |
| 主键过滤 | ids_in、ids_not_in参数 | primary_key_in、primary_key_not_in参数 |
| 子索引 | 性能和易用性更强的分片研发中,敬请期待。 | partition参数指定 |
| 响应字段 | 主键值会单独列出,便于定位数据 | 所有字段均在同一级参数中 |
| 参数名 | 类型 | 必选 | 子参数 | 类型 | 备注 |
|---|---|---|---|---|---|
| resource_id | string | 至少填写一个 | 资源 ID;与 collection_name 至少传入一个,同时传入时优先使用 resource_id。资源 ID 可通过相应资源的创建接口返回结果获取,也可在资源详情中查看。 | ||
| collection_name | string | 至少填写一个 | Collection 名称;未传 resource_id 时必填。 | ||
| index_name | string | 是 | 索引名称 | ||
output_fields | list | 否 | 要返回的标量字段列表。
| ||
| filter | map | 否 | 过滤条件,格式见下文。默认为空,不做过滤 | ||
| limit | int | 否 | 检索结果数量,默认为10, 上限是 100000 | ||
| offset | int | 否 | 偏移量。仅分页场景下使用,不建议设置过大值,否则有深分页影响。默认值为0。设置值至少为0,语义和 MySQL 的 offset 相同。 | ||
| advance(一些高级参数,普通场景不需要设置) | map | 否 | dense_weight | float32 | 如果collection带有sparse向量字段,这里可以指定检索时dense和sparse的权重。默认值0.5,可选范围[0.2, 1] |
| ids_in | list或list | 设定此参数,会限定仅在主键列表范围内进行检索。默认为空。 | |||
| ids_not_in | list或list | 设定此参数,将把主键列表范围内的数据从检索结果中排除 。默认为空。 | |||
| post_process_ops | list | 后置处理算子列表。在向量或标量召回阶段后,对候选数据进行进一步过滤处理,如字符串匹配、频控等。每个算子为一个map,串行执行。默认为空。详见下文后置处理算子。 | |||
post_process_input_limit | int | 当设置了post_process_ops时,进入后置处理阶段的候选数量。 | |||
| scale_k | float64 | 检索 sef 是索引参数 sef 的 scale_k 倍。默认 1,取值范围 [0.1, 100],值越大检索结果越精确,但相应地会降低性能。 |
使用 filter 的前提是,相应的标量字段设置了标量索引(ScalarIndex)。
| 算子 | 适用字段类型 | 说明 | 示例 |
|---|---|---|---|
must | string、int64、bool、list、带 FullText 配置的 text | 针对指定字段名生效,语义为必须在 [...] 之中,即 "must in"。如果字段为 list 类型,过滤条件为过滤配置 list 中所有元素都没有出现在物品数据的标签中。 |
|
must_not | string、int64、bool、list、带 FullText 配置的 text | 针对指定字段名生效,语义为必须不在 [...] 之中,即 "must not in"。如果字段为 list 类型,物品数据的标签集合中,任何一个标签都不能出现在过滤配置 list 中,否则将被过滤。 |
|
and | / | 逻辑算子,针对逻辑查询需求,对多个条件取交集。 |
|
or | / | 逻辑算子,针对逻辑查询需求,对多个条件取并集。 |
|
range | int64、float32 | 针对指定字段名生效,语义为必须在指定范围内。配置使用 |
|
time_range | date_time | 时间点筛选,配置使用 |
|
geo_range | geo_point | 地理距离筛选,使用 |
|
| 算子 | 适用字段类型 | 说明 |
|---|---|---|
| score_fusion | string | 分数融合算子,用于融合指定的时空标量的分数。 |
| string_contain | string | 关键词匹配过滤算子。表示该字段内容包含 pattern。 |
| string_match | string | 正则匹配过滤算子。 |
| enum_freq_limiter | string | 频控算子。用于保证一次召回的结果中,一个特定取值出现的总数不超过 threshold 次。 |
score_fusion
{ "op": "score_fusion", "fusion_by": "add", "addition_score_weight": 0.6, // 附加 score 的权重为 0.6,ann score 的权重为 1 - 0.6 = 0.4 "addition_score": [ { "factor": 1.0, "base_value_from": "scalar_field", "field": "f_sales" }, { "factor": -10.0, // 投诉多的商品,score 应该降低 "base_value_from": "scalar_field", "field": "f_complain" } ] }
string_contain
{ "op": "string_contain", "field": "name", "pattern": "bar" }
string_match
{ "op": "string_match", "field": "name", "pattern": "^[0-9A-Za-z_]+$" }
enum_freq_limiter
{ "op": "enum_freq_limiter", "field": "city", "threshold": 5 }
注:此参数仅在 searchByVector 和 searchByMultiModal 接口中支持
| 参数名 | 类型 | 必选 | 说明 |
|---|---|---|---|
tensor | list |
| 张量检索数据:用于和数据库中已有的张量做相似度计算的输入
|
| input_limit | int | 是 | 进入张量重排的候选数量,范围:[1, 1000] |
| 参数名 | 类型 | 子参数 | 说明 | |
|---|---|---|---|---|
| result | map | data | list | 查询到的数据列表,SearchItem结构见下。 |
| total_return_count | int | 返回实际检索结果的数据条数 | ||
| token_usage | map | 包括prompt_tokens、completion_tokens、image_tokens、total_tokens信息 |
| 参数名 | 类型 | 备注 |
|---|---|---|
| id | string/int64 | 数据的主键字段值。 |
| fields | map<string,any> | key为字段名,value为字段值 |
| score | float | 必返回。最终得分 score 值。search 接口返回的结果按 score 排序。 |
| ann_score | float | 非必返回。如果是全文检索、score值计算处理等算子加工过,会返回向量检索(ANN)的原始score值。 |
advance 为可选高级检索配置对象;其子参数 dense_weight、sparse_weight、need_instruction、instruction、rerank、post_process_ops 和 post_process_input_limit 均为可选项,仅在对应混合检索、Instruction、重排或后处理能力开启时生效。未填写的子参数使用接口默认行为。
token_usage 仅在接口实际调用向量化模型并返回用量信息时出现。
| 字段 | 类型 | 含义 |
|---|---|---|
prompt_tokens | int64 | 输入文本消耗的 Token 数。 |
completion_tokens | int64 | 模型输出消耗的 Token 数;无生成阶段时可能不返回或为 0。 |
image_tokens | int64 | 图片或视频帧折算的 Token 数。 |
total_tokens | int64 | 本次向量化总 Token 数。 |
| 能力 | 方法与路径 |
|---|---|
| 向量检索 | POST /api/vikingdb/data/search/vector |
| 随机检索 | POST /api/vikingdb/data/search/random |
| 关键词检索 | POST /api/vikingdb/data/search/keywords |
| ID 检索 | POST /api/vikingdb/data/search/id |
| 标量排序检索 | POST /api/vikingdb/data/search/scalar |
| 多模态检索 | POST /api/vikingdb/data/search/multi_modal |
本接口的业务错误码、触发条件和处理建议统一参见向量库 V2 错误码。排查时请同时记录响应中的 request_id,以便定位具体请求。