RAG 中级 18分钟
语义商品搜索引擎
基于向量搜索的商品推荐系统,支持自然语言描述搜索,理解用户真实意图。
PineconeSentence-TransformersFastAPINext.jsTailwind
项目概述
传统电商搜索依赖关键词精确匹配。用户搜"红色连衣裙"搜不到标注为"Scarlet Dress"的商品。电商平台平均有 30% 的搜索因为无精确匹配而返回空结果。
本案例构建了一个语义商品搜索引擎。利用 Sentence-Transformers 将商品描述和用户查询映射到同一向量空间,实现语义级别的匹配。
关键指标
88%
语义匹配准确率
从30%降至5%
搜索无结果率
< 100ms
搜索延迟 (P99)
+22%
搜索转化率提升
系统架构
搜索引擎建立在分层过滤 + 向量召回 + 精排的三阶段检索架构上。
(diagram)
实现细节
1
商品数据加工
多模态商品索引
每个商品生成统一的 Embedding:文本用 text-embedding-3-small 向量化,图片用 CLIP ViT-L/14 向量化,加权融合。
属性标签体系
建立多层级标签体系。NER 模型从搜索词中自动提取属性约束,用于 Elasticsearch 预过滤。
增量同步
通过 Kafka 消息队列监听商品变更。新商品上线后 30 秒内完成向量化并入索引。
2
检索与排序
混合检索
先过一层属性过滤(ES 精确匹配),再对结果做向量语义召回。两者结合大幅提升准确率。
商品属性提取
搜索词通过 NER 提取品牌、品类、价格范围、颜色等属性。提取到的属性用于 ES 过滤。
个性化排序
精排结合用户历史数据。搜索"理由"让用户理解为什么推荐这个商品。
3
搜索体验优化
搜索纠错
基于编辑距离和拼音相似度做拼写纠错。用户输入"运到鞋"提示"你是不是想找:运动鞋"。
同义词扩展
维护电商同义词库:"笔记本 ↔ 笔记本电脑 ↔ laptop"。搜索时自动扩展查询词。
搜索推荐
实时弹出搜索推荐词(基于前缀匹配 + 热搜排行)。无结果时展示相关度最高的替代商品。
语义搜索核心实现
from sentence_transformers import SentenceTransformer
from pinecone import Pinecone
model = SentenceTransformer("all-MiniLM-L6-v2")
pc = Pinecone(api_key=os.getenv("PINECONE_API_KEY"))
index = pc.Index("ecommerce-products-v2")
query_vec = model.encode(query).tolist()
results = index.query(vector=query_vec, top_k=50, include_metadata=True) 经验教训
- 属性过滤比语义搜索更重要
- 向量维度不是越高越好
- 季节性商品的 Embedding 会漂移
- 搜索理由展示大幅提升点击率