【案例】Doris4.x 向量搜索在电商领域的应用
1.电商场景设定与目标
- 业务背景:公司经营着一家跨境电商平台,商品库里有上百万件商品,包含品类、描述、用户评论等文本信息。
- 传统方案的痛点:
- 关键词搜索:机械地匹配词汇(如用户搜“保暖”漏掉“御寒”),且容易被SEO关键词误导,丢失大量语义相关的商品。
- 系统架构:过去做推荐或搜索,常需要“向量数据库 + 搜索引擎 + OLAP数据库”组合,数据在系统间来回搬运,链路长、维护难、延迟高。
- 应用目标:搭建一个 “千人千面”的混合智能搜索系统。
用户输入像 “适合冬天在办公室穿的高领毛衣,要纯色的” 这样的自然语言查询,或上传一张喜欢的衣服图片,系统能:
- 基于语义相似度,召回最符合描述意图的商品。
- 同时允许通过 WHERE 条件(如价格区间、尺码、品牌)进行精确过滤。
- 甚至结合用户画像,对结果进行个性化重排。
- 最终效果:一条SQL完成“语义理解 + 关键词匹配 + 结构化过滤”的混合召回,实现毫秒级的响应
2.向量数据的准备
我们需要将非结构化的文本(商品的标题、描述等)转换为计算机能理解的、固定长度的数值列表,也就是向量(Embeddings)。
这里以一个简单例子说明,对于商品“商品A”,我们通过调用嵌入模型服务(如OpenAI的text-embedding-3-small或开源的bge-m3)来向量化:
- 商品ID (ID): 1001
- 商品标题 (title): “冬季新款宽松高领毛衣”
- 品类 (category): "服装"
- 价格 (price): 299
- 人工生成的向量 (embedding): 这里用简化的3维数组作为示例:[0.12, 0.85, 0.34]
3.Doris建商品表
-- 创建商品向量表
CREATE TABLE product_vectors (
product_id BIGINT NOT NULL COMMENT "商品ID",
title VARCHAR(255) COMMENT "商品标题",
category VARCHAR(64) COMMENT "商品类目",
price DECIMAL(10,2) COMMENT "商品价格",
tags ARRAY<VARCHAR(50)> COMMENT "商品标签,用于结构化过滤",
embedding ARRAY<FLOAT> NOT NULL COMMENT "商品的文本语义向量",
INDEX idx_tit
