本文介绍云原生数据仓库AnalyticDB PostgreSQL版的商品属性提取和多模搜索案例。
系统需求
电商卖家在准备新商品资料时,需要拍摄商品照片、标注商品类别和属性。以女装为例,需要设置子类目是裙子或者衬衣,衬衣需要标注是圆领、V领、长袖、短袖、风格等多种属性。随着商品类别的增长,将积累大量的图片素材。如果这些图片素材没有被很好地管理和利用,则经常会出现找不到之前已经准备好的素材,需要重新拍摄的情况。
AnalyticDB PostgreSQL版可以帮助电商卖家管理和检索图片素材,可以根据图片类别、属性或者相似图片做多模检索。例如,检索与输入图片最相似且价格在200元~300元之间的所有商品的图片。
实现架构
AnalyticDB PostgreSQL版作为商品属性提取和图片资料管理的核心组件,数据读写流程如下所示。

插入数据
应用端通过以下步骤向商品库中插入数据。
- 应用端调OSS服务,将图片插入OSS,获得对应的URL。
说明 当前只支持HTTP和HTTPS协议的URL。
- 应用端调用特征提取服务,获得图片抽象后的特征向量。
说明 AnalyticDB PostgreSQL版暂不提供的提取向量特征的内置函数,需要您使用自定义函数提取特征向量。
- 应用端调用AnalyticDB PostgreSQL版服务将步骤一中的URL和步骤二中的特征向量一起插入商品库。
查询数据
应用端可以采用上述架构图中的任意一种方案从商品库中查询数据,查询步骤如下所示。
- 应用端调用OSS服务,将要查询的图片插入OSS,获得对应URL。
说明 当前只支持HTTP和HTTPS协议的URL。
- 应用端调用特征提取服务,获得URL对应图片抽象后的特征向量,同时也支持直接传入图片获取特征向量。
- 应用端调用AnalyticDB PostgreSQL版,获得相似特征向量图片对应的URL列表。
- 应用端根据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;