1. 语义搜索系统架构解析
在电商搜索场景中,传统的关键词匹配方式已经无法满足用户需求。当用户输入"适合小户型的舒适沙发"时,关键词匹配只能机械地查找同时包含"小户型"、"舒适"、"沙发"的商品,而会遗漏那些使用"紧凑型"、"迷你款"等近义词描述的商品。这就是语义搜索要解决的核心痛点。
1.1 系统核心组件
我们的语义搜索系统由以下几个关键组件构成:
- 嵌入模型:负责将文本和图像转换为高维向量。文本处理使用Sentence-BERT模型,输出384维向量;图像处理使用CLIP模型,输出512维向量。
- 向量数据库:采用Milvus存储和检索向量数据,支持高效的近似最近邻(ANN)搜索。
- 全文检索引擎:使用Elasticsearch提供传统的文本搜索能力,并处理过滤、排序等需求。
- 缓存层:Redis缓存热门查询结果,显著降低响应延迟。
- 应用层:Flask构建的API服务,整合各组件功能。
1.2 工作流程
当用户发起搜索请求时,系统会执行以下步骤:
- 检查Redis缓存中是否有匹配的查询结果
- 若无缓存,则使用嵌入模型将查询文本转换为向量
- 在Milvus中执行向量相似度搜索,获取候选商品
- 通过Elasticsearch对候选商品进行过滤和二次排序
- 将最终结果缓存到Redis并返回给用户
这种架构设计既保留了传统搜索的优势,又引入了语义理解能力,在实际应用中取得了显著效果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 向量化技术详解
2.1 文本向量化实现
我们使用Sentence-BERT的all-MiniLM-L6-v2模型进行文本向量化。这个模型有以下几个特点:
- 输入文本长度不限,但建议控制在512个token以内
- 输出384维归一化向量,适合余弦相似度计算
- 支持多语言,对中文电商场景特别友好
- 模型大小仅80MB左右,内存占用低
在实际编码时,我们对商品信息采用了拼接策略:
python复制def encode_product(self, name: str, description: str, tags: List[str]) -> np.ndarray:
"""将商品信息拼接后编码"""
text_content =
