Java生鲜电商平台-推荐系统模块的设计与架构
业务需求:
对于一个B2B的生鲜电商平台,对于买家而言,他需要更加快速的购买到自己的产品,跟自己的餐饮店不相关的东西,他是不关心的,而且过多无用的东西掺杂在一起,反而不便
于买家下单,用户体验也很差,严重的会因此丢了客户。(客户觉得太难用了。一般都就会放弃使用.)
对于卖家而言,他自己就调整下自己的商品的上架与下架,然后就是调整下自己商品的价格。(蔬菜类的商品会随着市场的供求关系会有相应的波动.)
业务分析:
推荐系统:根据买家的行为习惯以及购买行为来推荐些他可能需要的东西的一套算法系统。
对于买家而言,数量来源于以下三个维度:
1. 购买记录。-----买家实际下的订单。
2. 收藏夹。 -----对于买家而言,收藏了某个商品,但是并没购买的,我们认为他也会购买,属于需要推送的数据之一。
3. 常用清单。----用户最近一段时间购买的记录,我们业务分析认为他一定会再次购买,因为相对一个餐馆而言,它所做的菜从某种程度来说是一定的,所以购买的食材,也相对而言也是类似的。也就是说昨天买的,今天可能也会再次够买,只是数量有所变化而言。
4. 同类推荐。 ----对于一个餐馆而言,比如说小炒类似的餐馆,那么很多类似小炒的餐馆的所有菜应该也是类似的,也许存在不需要的,但是也存在可能需要的情况,也属于我们的推荐系统中的。
5. 系统推荐。 ----对于一个刚注册的买家而言,我们希望给他更好的业务体验,那么在注册的时候,他就会一定选择一个所属类别,根据类别,我们会把相应的类别的系统清单推荐出来,让客户一进来就感觉到这些他所需要的菜都好像是系统跟他量身定做的一样。
根据以上的业务分析,我们理清楚了上述的所有维度,以下是数据库的设计与思路:
1. 购买记录。来源于订单明细记录表:
CREATE TABLE `order_item` (
`item_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`order_id` bigint(20) DEFAULT NULL COMMENT '订单主表id,order_info表的order_id',
`order_number` varchar(32) DEFAULT NULL COMMENT '唯一订单号',
`order_status` tinyint(4) DEFAULT NULL COMMENT '订单项状态,1为已提交订单,2为取消订单',
`format_id` bigint(20) DEFAULT NULL COMMENT '商品规格的ID',
`buyer_id` bigint(20) unsigned DEFAULT '0' COMMENT '买家ID',
`seller_id` bigint(20) DEFAULT NULL COMMENT '所属卖家ID',
`delivery_type` tinyint(2) DEFAULT '1' COMMENT '配送类型,1为平台送,2.卖家自己送',
`delivery_status` tinyint(2