基于DWS的向量计算功能实现简单的商品搜索推荐系统

举报
yd_246118746 发表于 2025/12/17 17:34:03 2025/12/17
【摘要】 基于DWS的向量计算功能实现简单的商品搜索推荐系统 基于DWS的向量计算功能实现简单的商品搜索推荐系统 1. 前言 2. DWS向量计算功能简介 3. 完整示例 3.1 基础查询 3.2 使用索引 3.3 结果解读 4 总结 1. 前言适用版本:【9.1.1.200(及以上)】在生成式 AI 与大模型(LLM)重塑技术栈的今天,数据处理的需求已经从单一的“精确匹配”转向了“语义理解”。传统...

基于DWS的向量计算功能实现简单的商品搜索推荐系统

1. 前言

  • 适用版本:【9.1.1.200(及以上)】

在生成式 AI 与大模型(LLM)重塑技术栈的今天,数据处理的需求已经从单一的“精确匹配”转向了“语义理解”。传统的数据库系统在处理结构化数据(如订单金额、用户ID)方面表现完美,但在面对 AI 时代爆发的非结构化数据(文本、图像、音视频)时,基于关键词搜索的传统方式由于无法理解数据本身背后的“意思”从而显得力不从心。

核心痛点:传统数据库本质上依赖精确匹配(exact match)或字段索引查询,缺少以“含义”为中心的模糊相似搜索能力。AI相关应用与推荐系统场景带来了海量向量检索需求,相似性搜索是核心需求,对向量数据库常见应用场景:

  • 以文搜图/以图搜图: 找到与输入图片最相似的图片

  • 智能问答/RAG:在知识库中找到与用户问题最相关的文档片段

  • 推荐系统:找到与用户兴趣向量最相似的商品

解决方案:DWS集成 pgvector(0.8.0) 插件,可插拔式加载,实现库内向量计算检索能力。

定义
DWS向量计算并非独立的数据库系统,而是通过插件形式扩展传统数据库功能,使其能够处理高维向量数据,无需用户迁徙数据或重构应用架构,即可在现有系统中实现向量检索相关功能。

2. DWS向量计算功能简介

  1. 向量数据类型:

  1. 向量距离/相似度操作符:

  2. 索引类型:

3. 完整示例

假设我们正在做一个商品推荐搜索系统:

  • 商品本身有标题、描述、分类、价格等字段
  • 借助大模型embedding能力,我们能够将商品描述编码为向量
  • 同样的,将用户的搜索关键字也转化为向量
  • 目的:通过相似性搜索找出最符合用户搜索意图的商品

如需使用向量计算功能,请联系技术支持修改feature_support_options参数, 开启enable_pgvector选项。详细语法介绍,请参考DWS产品文档 向量计算章节

3.1 基础查询

  1. 安装扩展:

    create extension pgvector;
    
  2. 创建商品表,储存向量embedding:

    CREATE TABLE products (
        id bigserial PRIMARY KEY,
        title text,
        description text,
        price numeric,
        embedding vector(768)   --768维向量,由商品描述(description)生成
    );
    
  3. 插入数据

    INSERT INTO products (title, description, price, embedding) VALUES
    ('Wireless Earbuds', 'Bluetooth wireless earbuds with charging case', 59.9, '[0.12, 0.34, -0.21, ...]'),
    ('Noise Cancelling Headphones', 'Over-ear headphones with active noise cancellation', 129.9, '[0.11, 0.36, -0.19, ...]'),
    ('Gaming Headset', 'Wired gaming headset with microphone', 79.9, '[0.10, 0.33, -0.25, ...]'),
    ('Smartphone Stand', 'Adjustable phone stand for desk use', 12.9, '[0.45, -0.12, 0.08, ...]'),
    ('USB-C Charger', 'Fast charging USB-C power adapter', 19.9, '[0.42, -0.15, 0.05, ...]'),
    ('Mechanical Keyboard', 'Mechanical keyboard with blue switches', 89.9, '[0.55, 0.02, -0.31, ...]'),
    ('Wireless Mouse', 'Ergonomic wireless mouse', 29.9, '[0.53, 0.01, -0.28, ...]'),
    ('Laptop Backpack', 'Water-resistant laptop backpack', 49.9, '[0.60, -0.05, -0.10, ...]'),
    ('4K Monitor', '27-inch 4K UHD computer monitor', 299.9, '[0.58, 0.04, -0.35, ...]'),
    ('Webcam', 'HD webcam for video conferencing', 39.9, '[0.52, -0.01, -0.20, ...]'),
    ('Bluetooth Speaker', 'Portable Bluetooth speaker with deep bass', 45.9, '[0.14, 0.30, -0.18, ...]'),
    ('Smart Watch', 'Fitness tracking smart watch', 99.9, '[0.20, 0.40, -0.22, ...]'),
    ('Fitness Tracker', 'Lightweight activity and sleep tracker', 49.9, '[0.22, 0.38, -0.24, ...]'),
    ('Tablet Stylus', 'Stylus pen for tablets', 25.9, '[0.48, -0.10, 0.12, ...]'),
    ('Laptop Cooling Pad', 'Cooling pad with dual fans', 34.9, '[0.57, -0.02, -0.15, ...]');
    
  4. 相似度查询:

    通过以下查询,能够获取与用户向量相似度最高/距离最近的topk个商品

    SELECT id, title, price
    FROM products
    ORDER BY embedding <-> '[0.091, -0.054, 0.92, ...]'   -- 用户向量, 通过L2距离计算相似度
    LIMIT 10;
    
  5. 混合查询:

    DWS向量计算支持传统过滤方式及语义相似度查询的混合使用

    SELECT id,title,price
    FROM products
    WHERE price < 2000
    ORDER BY embedding <-> '[0.091, -0.054, 0.92, ...]'
    LIMIT 10;
    

3.2 使用索引

DWS向量计算默认使用精确近邻搜索,提供百分之百召回率但查询速度较慢。可以按需使用近似相邻搜索索引来牺牲部分召回率以提高查询速度。不同于传统索引,近似搜索索引可能会返回不同的查询结果。DWS向量计算目前支持的索引类型包括HNSW和IVFFlat。

  1. 创建索引
    -- HNSW 索引
    CREATE INDEX ON products USING hnsw (embedding vector_l2_ops) WITH (m = 16, ef_construction = 200);
    
    -- 或者 IVFFlat 索引
    CREATE INDEX ON products USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);
    
  2. 使用索引
    创建索引后执行topk查询,在距离操作符匹配的场景下会使用index scan,可以通过explain观察计划
     id |                            operation                             
    ----+------------------------------------------------------------------
      1 | ->  Limit                                                        
      2 |    ->  Streaming (type: GATHER)                                  
      3 |       ->  Limit                                                  
      4 |          ->  Index Scan using products_embedding_idx on products
    

3.3 结果解读

  • 用户搜索词为 wireless audio headset
    SELECT id, title
    FROM products
    ORDER BY embedding <-> '[0.13, 0.35, -0.20, ...]'   --用户搜索词的embedding
    LIMIT 10;

查询结果:
商品名为耳机、音响类型的数据相较于表中其他商品类别与用户搜索词在语义上更为接近,即便没有精确包含headset仍然会在结果中排序更靠前

  • 用户正在浏览 Noise Cancelling Headphones 商品,根据相关性进行推荐:
SELECT p2.title, p2.price
FROM products p1
JOIN products p2 ON p1.id <> p2.id
WHERE p1.title = 'Noise Cancelling Headphones'
ORDER BY p2.embedding <-> p1.embedding
LIMIT 10;

查询结果:
耳机音响类商品与用户正在浏览的 Noise Cancelling Headphones 产品相关性更高

4 总结

通过在 DWS 向量计算扩展能力,我们将传统以结构化查询为核心的数据库系统升级为能够具备语义理解与相似度计算能力的统一数据底座。系统不仅支持向量数据的存储与高效相似度检索,还允许业务方直接通过标准 SQL 完成语义搜索、推荐与相似内容匹配,无需引入额外的向量引擎或复杂的数据同步链路。

依托 HNSW、IVFFlat 近似最近邻索引,向量查询在大规模数据场景下依然具备可控的性能与稳定的响应能力。同时,向量检索能力与传统结构化查询、过滤条件、JOIN 逻辑的深度融合,使得搜索推荐、个性化分析以及 RAG 等 AI 应用可以自然落地在现有数仓与业务体系之上。

最终,这一能力扩展不仅降低了系统架构复杂度,也显著提升了数据平台对新一代智能应用的支撑能力,实现了从“数据查询”向“语义计算与业务决策支持”的演进。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。