系列随笔:
(二)基于商品属性的相似商品推荐算法——Flink SQL实时计算实现商品的隐式评分
(三)基于商品属性的相似商品推荐算法——批量处理商品属性,得到属性前缀及完整属性字符串
(四)基于商品属性的相似商品推荐算法——推荐与评分高的商品属性相似的商品
2020.04.15 补充:协同过滤推荐算法.pptx
提取码:4tds
整体框架及处理流程
流程图:
推荐N个商品,具体步骤:
1)用户行为日志埋点(这里使用的是阿里云log service);
2)Flink SQL(实时计算)统计用户行为对商品的隐式评分,保存到 rc_member_goods 表;
3)预处理平台全部商品,计算其属性前缀或完整属性,保存到 rc_goods_properties 表;
4)rc_member_goods表关联rc_goods_properties表按评分倒序查询当前用户商品,得到2个商品(商品A和商品B)及其他的属性信息;
5)用这两个商品的属性前缀通过rc_goods_properties表查询相同属性前缀的其他商品;
6)查询到的商品分别与商品A、商品B对比计算相似值;
7)相似值倒序,按比例取N个商品;注:如果相似商品数量不足N个,则补充销售高的其他商品;
8)返回推荐结果
数据库设计:
CREATE TABLE `rc_config` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增', `event` varchar(50) DEFAULT NULL COMMENT '理点事件', `code_name` varchar(20) DEFAULT '' COMMENT '商品编码的字段名', `score` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '得分', `status` tinyint(1) unsigned DEFAULT '1' COMMENT '状态', `remark` varchar(50) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `idx_event` (`event`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='商品推荐配置表';
CREATE TABLE `rc_goods_properties` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID', `goods_code` int(11) unsigned NOT NULL COMMENT '商品编号', `property_prefix` varchar(100) DEFAULT NULL COMMENT '属性前缀', `properties` varchar(200) DEFAULT NULL COMMENT '属性', `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_goods_code` (`goods_code`) USING HASH, KEY `idx_prefix` (`property_prefix`) USING HASH ) ENGINE=InnoDB AUTO_INCREMENT=154297 DEFAULT CHARSET=utf8mb4 COMMENT='商品属性表';
CREATE TABLE `rc_member_goods` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID', `member_code` int(11) unsigned DEFAULT NULL COMMENT '会员编码', `cid` varchar(100) CHARACTER SET utf8 DEFAULT NULL COMMENT '设备ID', `goods_code` int(11) unsigned NOT NULL COMMENT '商品编码', `score` int(10) NOT NULL DEFAULT '0' COMMENT '评分', `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_unique` (`member_code`,`cid`,`goods_code`) USING BTREE, KEY `idx_cid` (`cid`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2777342 DEFAULT CHARSET=utf8mb4 COMMENT='用户商品评分表';