混合搜索(Hybrid Search)结合了向量搜索和全文搜索的优势,既能理解语义含义,又能精确匹配关键词,提供更准确的搜索结果。
理解语义,找到意思相近的内容
精确匹配关键词,支持模糊搜索
同时包含全文索引和向量索引
-- 创建产品表
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
description TEXT,
category VARCHAR(100),
embedding VECTOR(1536),
FULLTEXT INDEX ft_idx (name, description) -- 全文索引
);
-- 创建向量索引
CREATE INDEX vec_idx ON products
USING HNSW (embedding);点击"运行"按钮查看结果
添加一些产品数据用于测试
INSERT INTO products (name, description, category, embedding)
VALUES
('iPhone 15 Pro Max',
'苹果最新旗舰手机,搭载 A17 Pro 芯片',
'手机',
AI_EMBED('苹果最新旗舰手机,搭载 A17 Pro 芯片')),
('华为 Mate 60 Pro',
'华为新一代商务旗舰,卫星通讯',
'手机',
AI_EMBED('华为新一代商务旗舰,卫星通讯')),
('MacBook Pro 16',
'专业级笔记本电脑,M3 Max 芯片',
'电脑',
AI_EMBED('专业级笔记本电脑,M3 Max 芯片'));点击"运行"按钮查看结果
结合向量搜索和全文搜索
使用权重系数平衡向量搜索和全文搜索的结果
-- 混合搜索:加权融合
WITH vector_results AS (
SELECT id, name,
COSINE_DISTANCE(embedding, AI_EMBED('高性能手机')) AS vec_score
FROM products
),
text_results AS (
SELECT id, name,
MATCH(name, description) AGAINST('iPhone Pro' IN BOOLEAN MODE) AS text_score
FROM products
)
SELECT
v.id,
v.name,
-- 混合得分:向量 60% + 全文 40%
(0.6 * (1 - v.vec_score) + 0.4 * COALESCE(t.text_score, 0)) AS hybrid_score
FROM vector_results v
LEFT JOIN text_results t ON v.id = t.id
ORDER BY hybrid_score DESC
LIMIT 10;点击"运行"按钮查看结果
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 加权融合 | 简单直观,易于调优 | 需要手动调节权重 | 已知偏好的场景 |
| RRF 融合 | 无需调参,效果稳定 | 对得分差异不敏感 | 通用搜索场景 |
| Rerank | 效果最佳 | 需要额外模型,延迟较高 | 高精度要求场景 |
RRF (Reciprocal Rank Fusion) 算法的主要特点是什么?