/index/search 接口用于实现检索,本页面主要介绍如何实现稠密稀疏混合近邻检索。
稠密稀疏混合近邻检索是结合稠密向量和稀疏向量的检索方法,可以同时利用稠密向量的语义匹配能力和稀疏向量的关键词匹配能力,提高搜索结果的准确性和覆盖面。
稠密向量是由模型(如doubao-embedding)生成的高维向量,通常通过深度学习模型从文本、图像或其他数据中提取语义特征。向量的每个维度都有非零值。
稀疏向量是一个高维向量,其中大多数维度为零,通常由词袋模型生成,基于显式的关键词表示。
说明
请求向量数据库 VikingDB 的 OpenAPI 接口时,需要构造签名进行鉴权,详细的 OpenAPI 签名调用方法请参见 API签名调用指南。
URI | /api/index/search | 统一资源标识符 |
---|---|---|
请求方法 | POST | 客户端对向量数据库服务器请求的操作类型 |
请求头 | Content-Type: application/json | 请求消息类型 |
Authorization: HMAC-SHA256 *** | 鉴权 |
在向量近邻检索的基础上,您可以在 order_by_vector 参数下写入待检索的稠密和稀疏向量,并使用 dense_weight 子参数调整稠密向量权重。
参数 | 子参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
---|---|---|---|---|---|
search | order_by_vector | map | 是 | 根据向量距离做检索,可选值如下:
| |
dense_weight | float | 否 | 0.5 | 混合检索中稠密向量的权重,1 表示纯稠密检索 。 |
说明
稠密稀疏混合近邻检索时,需要同时输入稠密向量和稀疏向量。
稠密向量为列表形式,稀疏向量为 json 字段形式,k 为关键词的字面值,v 为关键词的权重。
两种向量可以以列表的形式传入多条记录,记录的数量需要一致,列表下标一致的稠密向量和稀疏向量表示同一条查询。
参数 | 参数说明 |
---|---|
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 | 权限不足。 |
1000019 | 400 | dsl使用错误信息 | dsl格式错误 |
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, //稠密向量权重 } } }'
执行成功返回:
HTTP/1.1 200 OK Content-Length: 43 Content-Type: application/json { "code":0, "msg":"search success", "request_id":"021695029537650fd001de666660000000000000000000230da93", "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":"021695029736548fd001de66666000000000000000000029aa917"}