前些日子,公司要求做推荐系统,不言而喻,推荐系统对于电商来说是非常有优点的。当然我们是刚開始做,还得从简单的開始做,首先第一版是依据用户近期浏览的进行推荐。接下来,可能要依据相似用户进行相似用户的推荐。这样还要对会员进行分等级。所以后面的工作还有非常多。
博客是个好东西,我热衷于博客记录下我做过的每一件事。
实现的步骤例如以下:
流程图:
思路:
实现的步骤为:
1、得到用户信息。
技术实现:抓取用户近期浏览的一款商品的 SKUid;同一时候获取用户的UV(独立訪客),这样用户一开网页我们就知道是哪个用户了。
2、对用户浏览的商品分析出相似商品。
技术实现:拿到SKUid进行分析同样类目(Cid)下的SKUid。这样获得了商品的相似度。 然后再依据价格进行排序,取价格最靠近当前浏览的十个SKUid。
3、页面展示:
技术实现:分析完数据后,我们依据UV(独立訪客)给用户推荐同一类目下价格接近的商品。js文件将会将推荐的商品在页面渲染出来。
过程中遇到的问题:
问题一:
分析器5秒跑一次,可是每个新UV进来,就会往数据库多加一条数据。数据量大了,分析器分析起来就慢了;
解决的方法:
添加一个字段为存放时间戳,当新增一条数据,存一个时间戳,假设该用户继续浏览还有一个ITEM页面,即更新skuid、价格、等信息外,还要更新保存的时间戳为当前的时间,这样事实上就好办了,我就仅仅分析当前时间就在近期五分钟左右的数据。由于这五分钟的用户都是近期的用户,还有正在浏览页面的用户。这样就攻克了分析器跑不动的问题。也过滤掉了反复分析的问题。
问题二:
毫无疑问,这样下去表会越来越大,查询的性能也会慢慢减少。
解决的方法:
方案一: 这样事实上我们能够另外建一张表,仅仅用来保存结果的表。或者就两个字段,一个是会员名,一个就是推荐的skuid信息。不是会员的用户我们仅仅保存近期的两三天的推荐记录。
方案二:不建表,将结果保存到memcache。保质期为一个月。
问题三:
如何防止被刷;
解决方式:
加入一个字段,每次该条记录变动一次,加入的字段加一,当天超过一千的,进行屏蔽。