向量搜索(单向量&多向量)

最近更新时间:2026-03-02 16:22:42

我的收藏
本文介绍 kNN 搜索的基本要点,您可以参阅此文档了解更多详情。

单向量搜索

这是最基本的向量搜索方式,针对单个向量字段进行相似度搜索:
GET /book-index/_search
{
"knn": {
"field": "title_vector",
"query_vector": [0.1, 0.2, 0.3 ...],
"k": 10, // 返回的 top k 结果数量
"num_candidates": 100 // 指定每个分片上要检索的候选向量数量
}
"fields": ["id", "title_text", "category"],
"_source": false,
}

参数说明:
field: 要搜索的向量字段名
query_vector: 查询向量,维度必须与字段定义一致
k: 返回的最相似文档数量
num_candidates: 在每个分片上考虑的候选向量数量,值越大精度越高但性能越差
当然,您可以直接输入查询文本,通过在线推理生成查询向量(下同):
GET /book-index/_search
{
"knn": {
"field": "title_vector",
"query_vector_builder": {
"text_embedding": {
"model_id": "model-bge-base",
"model_text": "人类简史"
}
},
"k": 10, // 返回的 top k 结果数量
"num_candidates": 100 // 指定每个分片上要检索的候选向量数量
},
"fields": ["id", "title_text", "category"],
"_source": false
}


多向量搜索

ES 支持同时对多个向量字段进行搜索,并合并结果。
GET /book-index/_search
{
"query": {
"bool": {
"should": [
{
"knn": {
"field": "title_vector",
"query_vector": [0.1, 0.2, 0.3 ...],
"k": 5,
"num_candidates": 50,
"boost": 0.8
}
},
{
"knn": {
"field": "content_vector",
"query_vector": [0.1, 0.2, 0.3, ...],
"k": 5,
"num_candidates": 50,
"boost": 0.2
}
}
]
}
}
}
特点:
两个搜索并行执行。
结果按分数合并排序。
可使用 boost 参数调整各字段权重。
相同文档在不同搜索结果中出现时,取最高分。