三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

【案例】Doris4.x 向量搜索在电商领域的应用

【案例】Doris4.x 向量搜索在电商领域的应用

1.电商场景设定与目标

  • 业务背景:公司经营着一家跨境电商平台,商品库里有上百万件商品,包含品类、描述、用户评论等文本信息。
  • 传统方案的痛点:
  1. 关键词搜索:机械地匹配词汇(如用户搜“保暖”漏掉“御寒”),且容易被SEO关键词误导,丢失大量语义相关的商品。
  2. 系统架构:过去做推荐或搜索,常需要“向量数据库 + 搜索引擎 + OLAP数据库”组合,数据在系统间来回搬运,链路长、维护难、延迟高。
  • 应用目标:搭建一个 “千人千面”的混合智能搜索系统。

用户输入像 “适合冬天在办公室穿的高领毛衣,要纯色的” 这样的自然语言查询,或上传一张喜欢的衣服图片,系统能:

  1. 基于语义相似度,召回最符合描述意图的商品。
  2. 同时允许通过 WHERE 条件(如价格区间、尺码、品牌)进行精确过滤。
  3. 甚至结合用户画像,对结果进行个性化重排。
  • 最终效果:一条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

← 返回列表