返回首页

Manticore 混合搜索:BM25 + KNN

Manticore Search 中的混合搜索使用 RRF 结合 BM25 和 KNN 以实现最佳相关性。适用于 RAG、支持和电子商务。提供代码示例和设置。

Manticore 中的混合搜索:RRF 和示例
Advertisement 728x90

Manticore Search中的混合搜索:融合BM25与KNN

Manticore Search中的混合搜索将全文BM25搜索与向量KNN搜索结合到单一查询中。这允许同时考虑精确关键词和语义相似性。对于像“便宜跑鞋”这样的查询,BM25将基于词元提供匹配,而KNN将捕捉诸如“适合慢跑的舒适鞋履”等短语的含义。

该方法使用互惠排名融合(RRF)来合并排序列表。在任一搜索中排名靠前的文档在最终排序中获得优先权。

混合方法的优势

全文搜索对于罕见术语、SKU和错误代码非常有效。向量搜索捕捉同义词和自然语言,因为相关概念的嵌入在向量空间中位置相近。

Google AdInline article slot

每种方法的弱点:

  • BM25难以处理同义词。
  • KNN忽略没有语义含义的精确标识符。

混合检索提高了混合查询的召回率,减少了对复杂逻辑的需求。

应用场景

混合搜索在以下场景中相关:

Google AdInline article slot
  • 包含意图和细节的查询,例如python error 403 forbidden——错误代码通过BM25处理,描述通过KNN处理。
  • 用于LLM的RAG管道——提供最相关的文本块。
  • 包含结构化数据(产品型号)和非结构化数据(描述)的目录。
  • 不可预测的用户模式——精确短语或描述性语言。

在电子商务中,混合搜索并行处理名称、描述和视觉嵌入。

RRF机制

RRF聚合排名而不标准化分数。公式:1 / (rank_constant + rank)。默认rank_constant=60。

合并前3名示例:

Google AdInline article slot

| 文档 | 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

Advertisement 728x90

继续阅读