☰
电商搜索推荐中的DWS向量计算实践
2026/10/28 14:30:52 网站建设 项目流程

1. 项目背景与核心价值

最近在折腾一个电商平台的搜索推荐模块时,发现传统的关键词匹配方式越来越力不从心。用户搜索"夏季轻薄外套",系统却只能机械地匹配标题中含这些关键词的商品,完全不懂"透气防晒衣"、"空调衫"这些同义商品也该被推荐。这种场景下,向量计算技术就成了破局的关键。

华为云数据仓库服务DWS(Data Warehouse Service)最近推出的向量计算功能,让我们能够用SQL直接处理向量数据。这个功能基于PostgreSQL的pgvector扩展,支持欧式距离、余弦相似度等计算方式。对于中小型电商来说,用DWS实现向量搜索是个性价比很高的方案——既不用搭建专门的向量数据库,又能复用现有的数据仓库基础设施。

2. 系统架构设计

2.1 整体技术栈选择

整个系统采用三层架构:

  1. 数据层:DWS作为向量存储和计算引擎
  2. 服务层:Spring Boot微服务封装向量搜索接口
  3. 展示层:Vue.js实现前端交互界面

选择DWS而不是专用向量数据库(如Milvus)主要考虑:

  • 已有商品数据都存储在DWS中,避免跨系统ETL
  • 团队熟悉SQL开发,学习成本低
  • 华为云DWS的分布式架构能支撑亿级向量数据

2.2 向量生成方案

商品向量通过两种方式生成:

  1. 标题和描述文本使用BERT模型提取768维向量
  2. 商品类目、品牌等结构化数据通过One-Hot编码

实测发现,将文本向量和结构化向量拼接后降维到256维效果最佳。降维采用PCA算法,既保持区分度又减少存储空间。

3. DWS向量功能实操

3.1 环境准备

首先在DWS中创建扩展:

CREATE EXTENSION vector;

建表时定义向量字段:

CREATE TABLE products ( id BIGINT PRIMARY KEY, name VARCHAR(255), vector VECTOR(256) -- 256维向量 );

3.2 向量索引优化

为加速搜索,需要创建IVFFLAT索引:

CREATE INDEX products_vector_idx ON products USING ivfflat (vector) WITH (lists = 100); -- 根据数据量调整lists参数

这里lists参数控制聚类中心数量,经验公式:

  • 数据量<100万:lists=数据量/1000
  • 数据量>100万:lists=sqrt(数据量)

3.3 相似度搜索SQL

核心搜索语句示例:

SELECT id, name, 1 - (vector <=> '[0.1,0.2,...]') AS similarity FROM products ORDER BY vector <=> '[0.1,0.2,...]' LIMIT 10;

其中<=>是余弦距离运算符,DWS还支持:

  • <->欧式距离
  • <#>内积距离

4. 工程化实践要点

4.1 性能优化技巧

  1. 批量写入时先禁用索引:
ALTER INDEX products_vector_idx UNUSABLE; -- 批量INSERT... ALTER INDEX products_vector_idx REBUILD;
  1. 查询时使用预编译语句避免硬解析

  2. 设置work_mem参数提升排序性能:

SET work_mem='256MB';

4.2 混合搜索策略

实际采用"向量搜索+业务过滤"的混合模式:

WITH vector_results AS ( SELECT id FROM products WHERE vector <=> '[0.1,0.2,...]' < 0.3 ORDER BY vector <=> '[0.1,0.2,...]' LIMIT 100 ) SELECT p.* FROM products p JOIN vector_results v ON p.id = v.id WHERE p.category = 'clothing' -- 业务过滤条件 AND p.price BETWEEN 100 AND 500 LIMIT 10;

5. 效果评估与调优

5.1 评估指标

建立A/B测试框架对比:

  1. 传统关键词搜索(对照组)
  2. 向量搜索(实验组)

核心指标:

  • CTR(点击通过率)
  • 转化率
  • 平均停留时长

5.2 参数调优

通过网格搜索确定最佳参数组合:

  • 向量维度:128/256/512
  • 相似度阈值:0.2/0.3/0.4
  • 返回结果数:5/10/20

最终我们选择256维+0.3阈值+10条结果的组合,CTR提升37%。

6. 踩坑实录

  1. 索引重建导致服务超时

    • 解决:在低峰期执行rebuild,或采用CONCURRENTLY方式
  2. 向量维度不一致报错

    • 注意:所有向量必须严格等长,写入前要校验维度
  3. 距离计算方式选错

    • 关键:文本相似度用余弦距离,图搜用欧式距离
  4. 内存不足问题

    • 方案:调整maintenance_work_mem参数
    SET maintenance_work_mem='2GB';

这个方案上线后,最让我意外的是连带效果——用户"找不到想要商品"的客服投诉减少了65%。不过要提醒的是,DWS的向量功能目前最大支持2048维,超大规模场景还是需要考虑专业向量数据库。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询