Manticore Search中的混合搜索:融合BM25与KNN
Manticore Search中的混合搜索将全文BM25搜索与向量KNN搜索结合到单一查询中。这允许同时考虑精确关键词和语义相似性。对于像“便宜跑鞋”这样的查询,BM25将基于词元提供匹配,而KNN将捕捉诸如“适合慢跑的舒适鞋履”等短语的含义。
该方法使用互惠排名融合(RRF)来合并排序列表。在任一搜索中排名靠前的文档在最终排序中获得优先权。
混合方法的优势
全文搜索对于罕见术语、SKU和错误代码非常有效。向量搜索捕捉同义词和自然语言,因为相关概念的嵌入在向量空间中位置相近。
每种方法的弱点:
- BM25难以处理同义词。
- KNN忽略没有语义含义的精确标识符。
混合检索提高了混合查询的召回率,减少了对复杂逻辑的需求。
应用场景
混合搜索在以下场景中相关:
- 包含意图和细节的查询,例如
python error 403 forbidden——错误代码通过BM25处理,描述通过KNN处理。 - 用于LLM的RAG管道——提供最相关的文本块。
- 包含结构化数据(产品型号)和非结构化数据(描述)的目录。
- 不可预测的用户模式——精确短语或描述性语言。
在电子商务中,混合搜索并行处理名称、描述和视觉嵌入。
RRF机制
RRF聚合排名而不标准化分数。公式:1 / (rank_constant + rank)。默认rank_constant=60。
合并前3名示例:
| 文档 | BM25排名 | KNN排名 | RRF分数 |
|----------|-----------|----------|-----------|
| 文档A | 1 | 2 | 0.0325 |
| 文档C | 3 | 1 | 0.0323 |
| 文档B | 2 | - | 0.0161 |
| 文档D | - | 3 | 0.0159 |
文档A因在两个列表中排名靠前而领先。RRF优于基于分数的合并,因为它不需要尺度校准。
子查询(MATCH和KNN)并行执行;过滤器应用于所有查询。
知识库的实用示例
在支持数据库中,查询“无法连接到服务器”+错误代码E-5020。
KNN结果:
| # | 标题 | 距离 |
|---|-------|----------|
|1| E-5030: DNS | 0.572 |
|2| E-2091: 超时 | 0.583 |
|3| E-5020: SSL | 0.605 |
使用MATCH('E-5020')和KNN的混合搜索:
SELECT title, hybrid_score()
FROM support_articles
WHERE knn(embedding, '无法连接到服务器')
AND MATCH('E-5020')
LIMIT 5
OPTION fusion_method='rrf';
| # | 标题 | 混合分数 |
|---|-------|--------------|
|1| 错误E-5020: SSL证书不匹配 | 0.032 |
|2| E-5030 | 0.016 |
|3| E-2091 | 0.016 |
E-5020升至第一位:BM25捕捉精确代码,KNN捕捉上下文。
运行混合搜索
使用hybrid_match()的自动模式:
SELECT id, hybrid_score()
FROM products
WHERE hybrid_match('跑鞋');
JSON API:
POST /search
{
"table": "products",
"hybrid": { "query": "跑鞋" }
}
Manticore生成嵌入,执行搜索并合并结果。
显式控制:
SELECT id, hybrid_score()
FROM products
WHERE match('跑鞋')
AND knn(embedding, (0.12, 0.45, 0.78, ...))
OPTION fusion_method='rrf';
可用指标:hybrid_score()、weight()(BM25)、knn_dist()。
融合设置
rank_constant:顶部位置的支配性(较低值增加强调)。fusion_weights:子查询权重,例如(text=0.5, knn=0.3)。window_size:中间结果的数量。
多个KNN:
SELECT id, hybrid_score()
FROM products
WHERE match('跑鞋') AS text
AND knn(title_vec, (0.12, 0.45, ...)) AS title_sim
AND knn(image_vec, (0.88, 0.21, ...)) AS image_sim
OPTION fusion_method='rrf',
fusion_weights=(text=0.5, title_sim=0.3, image_sim=0.2);
关键要点
- 混合搜索分配信号:标识符通过BM25处理,含义通过KNN处理。
- RRF确保稳定合并而无需校准。
- 支持多向量空间以处理多模态数据。
- 并行执行最小化延迟。
- 自动嵌入生成简化集成。
— Editorial Team
暂无评论。