为什么需要搜索增强

纯向量检索在处理精确匹配、关键词搜索和结构化查询时存在天然局限。而传统搜索引擎(如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))

这种方法对不同类型的搜索结果一视同仁,稳定性好。

查询理解与改写

搜索增强的关键在于理解用户意图并构造正确的查询:

  1. 查询分类:判断查询是事实型、导航型还是探索型
  2. 实体识别:提取查询中的实体名称
  3. 查询扩展:使用同义词和相关词扩展查询
  4. 多轮优化:根据初步检索结果调整查询

工程实践

Elasticsearch优化

  • 使用ik分词器处理中文搜索
  • 设置合理的分片和副本策略
  • 开启慢查询日志监控性能

缓存策略

  • 高频查询结果缓存
  • 向量预计算避免重复编码
  • 多级缓存(内存+SSD)

性能监控

关键监控指标包括:检索延迟、召回率、精确率、结果多样性。

应用场景

  • 企业知识库搜索:结合精确匹配和语义理解
  • 电商商品搜索:品牌名精确匹配+描述语义搜索
  • 法律文档检索:法条编号精确匹配+内容语义检索

搜索增强生成代表了RAG系统的重要发展方向,通过融合传统搜索技术的成熟能力,可以构建更加健壮和精准的问答系统。