本文介绍云原生数据仓库AnalyticDB PostgreSQL版的商品属性提取和多模搜索案例。

系统需求

电商卖家在准备新商品资料时,需要拍摄商品照片、标注商品类别和属性。以女装为例,需要设置子类目是裙子或者衬衣,衬衣需要标注是圆领、V领、长袖、短袖、风格等多种属性。随着商品类别的增长,将积累大量的图片素材。如果这些图片素材没有被很好地管理和利用,则经常会出现找不到之前已经准备好的素材,需要重新拍摄的情况。

AnalyticDB PostgreSQL版可以帮助电商卖家管理和检索图片素材,可以根据图片类别、属性或者相似图片做多模检索。例如,检索与输入图片最相似且价格在200元~300元之间的所有商品的图片。

实现架构

AnalyticDB PostgreSQL版作为商品属性提取和图片资料管理的核心组件,数据读写流程如下所示。

插入数据

应用端通过以下步骤向商品库中插入数据。

  1. 应用端调OSS服务,将图片插入OSS,获得对应的URL。
    说明 当前只支持HTTP和HTTPS协议的URL。
  2. 应用端调用特征提取服务,获得图片抽象后的特征向量。
    说明 AnalyticDB PostgreSQL版暂不提供的提取向量特征的内置函数,需要您使用自定义函数提取特征向量。
  3. 应用端调用AnalyticDB PostgreSQL版服务将步骤一中的URL和步骤二中的特征向量一起插入商品库。

查询数据

应用端可以采用上述架构图中的任意一种方案从商品库中查询数据,查询步骤如下所示。

  1. 应用端调用OSS服务,将要查询的图片插入OSS,获得对应URL。
    说明 当前只支持HTTP和HTTPS协议的URL。
  2. 应用端调用特征提取服务,获得URL对应图片抽象后的特征向量,同时也支持直接传入图片获取特征向量。
  3. 应用端调用AnalyticDB PostgreSQL版,获得相似特征向量图片对应的URL列表。
  4. 应用端根据URL列表,调OSS服务,获取并返回图片。

示例

创建商品表

CREATE TABLE products (
  id bigint,
  image_url varchar,
  properties varchar,
  feature real[],
  PRIMARY KEY (id)
) DISTRIBUTED BY (id);

插入数据

先调用用户自定义函数获取特征向量,例如feature_vector('clothes','https://example.com/img.jpg')表示图片'https://example.com/img.jpg'对应的向量,然后插入数据。

INSERT INTO products (id, image_url, feature) VALUES (10, 'https://example.com/img.jpg', feature_vector('clothes','https://example.com/img.jpg'));

查询数据

支持SELECT中直接带UDF传入图片URL查询, 例如检索与图片链接为'https://example.com/img.jpg'最相似的前10条记录的商品ID和URL:

SELECT id, image_url FROM products ORDER BY l2_distance(feature_vector('clothes','https://example.com/img.jpg'), feature) desc LIMIT 10;