系统需求

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

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

实现架构

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



插入数据

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

  1. 应用端调OSS服务,将图片插入OSS,获得对应的URL。
    说明 当前只支持http和https协议的URL。
  2. 应用端调用特征提取服务,获得图片抽象后的特征向量。
  3. 应用端调用分析型数据库PostgreSQL版服务将步骤一中的URL和步骤二中的特征向量一起插入商品库。

查询数据

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

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

示例

创建商品表

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

插入数据

先调用用户自定义函数获取特征向量,然后插入数据。

Select feature_extractor('clothes','https://xxx.com/img.jpg');
说明 可以先通过SELECT确认特征向量是否正确。
insert into products (id, image_url, feature) values (10, 'https://xxx/img.jpg', feature_extractor('clothes','https://xxx/img.jpg'));

查询数据

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

Select id, image_url from products order by l2_distance(feature_extractor('clothes','https://xxx/img.jpg'), feature) desc limit 10;