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

这篇说说 kNN 搜索的单向量与多向量搜索方式,包括参数说明和查询示例,帮助用户实现向量相似度检索。 单向量搜索:针对单个向量字段进行相似度搜索,支持直接传入向量或通过文本在线推理生成查询向量。 多向量搜索:同时对多个向量字段搜索并合并结果,支持使用 boost 参数调整各字段权重。

相关产品
Elasticsearch Service 产品页,含版本规格、价格与购买入口。

这篇说说 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 参数调整各字段权重。

·相同文档在不同搜索结果中出现时,取最高分。

赞 (0)
上一篇 4天前
下一篇 4天前