为什么需要搜索增强
纯向量检索在处理精确匹配、关键词搜索和结构化查询时存在天然局限。而传统搜索引擎(如Elasticsearch)在精确匹配、布尔查询和聚合分析方面有着成熟的能力。将两者结合,可以取长补短。
混合搜索架构
混合搜索的核心思想是将向量检索和关键词检索的结果进行融合。
架构层次
用户查询 → 查询解析 → {向量检索, 关键词检索} → 结果融合 → 重排序 → LLM生成
实现方案
1. Elasticsearch + 向量插件
Elasticsearch从8.0版本开始原生支持向量检索,无需额外插件。
query = {
"knn": {
"field": "embedding",
"query_vector": query_vector,
"k": 10
},
"query": {
"match": {
"content": {
"query": query_text,
"boost": 0.3
}
}
}
}
2. 独立搜索+向量服务
将Elasticsearch和向量数据库独立部署,在应用层进行结果融合。
结果融合策略
加权融合
分别为向量检索和关键词检索的结果分配权重:
Score = α * vector_score + (1-α) * bm25_score
α的取值通常通过实验确定,在0.3-0.7之间调节。对于术语明确的查询,提高BM25权重;对于语义查询,提高向量权重。
级联融合
先进行BM25搜索,然后在搜索结果范围内再进行向量重排序。或者反向操作,先向量搜索再BM25过滤。
RRF融合
倒数排序融合(Reciprocal Rank Fusion)是一种无需调参的融合方法:
Score(d) = Σ 1/(k + rank_i(d))
这种方法对不同类型的搜索结果一视同仁,稳定性好。
查询理解与改写
搜索增强的关键在于理解用户意图并构造正确的查询:
- 查询分类:判断查询是事实型、导航型还是探索型
- 实体识别:提取查询中的实体名称
- 查询扩展:使用同义词和相关词扩展查询
- 多轮优化:根据初步检索结果调整查询
工程实践
Elasticsearch优化
- 使用ik分词器处理中文搜索
- 设置合理的分片和副本策略
- 开启慢查询日志监控性能
缓存策略
- 高频查询结果缓存
- 向量预计算避免重复编码
- 多级缓存(内存+SSD)
性能监控
关键监控指标包括:检索延迟、召回率、精确率、结果多样性。
应用场景
- 企业知识库搜索:结合精确匹配和语义理解
- 电商商品搜索:品牌名精确匹配+描述语义搜索
- 法律文档检索:法条编号精确匹配+内容语义检索
搜索增强生成代表了RAG系统的重要发展方向,通过融合传统搜索技术的成熟能力,可以构建更加健壮和精准的问答系统。
