单向量搜索
这是最基本的向量搜索方式,针对单个向量字段进行相似度搜索:
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 参数调整各字段权重。
相同文档在不同搜索结果中出现时,取最高分。