php产品推荐,php – (穷人的)产品推荐实施

我正在尝试为在线商店建立一个穷人的推荐系统.

我想要认识到那种亚马逊“买了这个项目的顾客也买了”的功能,我读了很多关于它的内容.

我知道有Apache Mahout的事情,但我无法以这种方式调整服务器.然后会有谷歌预测API,但它需要花钱,所以我开始尝试自己.

我得到了250.000项的orderhistory,我写了一个嵌套的MySQL查询来查找包含当前文章的订单,对其他订单项进行排名并对该表进行排序以进行排名,因此我得到了一组其他人随当前订购的产品文章.

问题是,查询可能需要10秒 – 所以这不能直接使用.

我想到了一个缓存表,但这个查询在20分钟后停止(有60.000个产品和250.000个订购商品)所以我无法填写该表.

我目前的解决方法如下:

建议HTML通过AJAX ondocumentready加载,因此网站加载,而推荐在后台加载.推荐数据处理一次并存储在filecache(PEAR简单缓存)中,以便下次加载更快.因此,如果有人访问该网站并存储一天或一周,则按需制作缓存.

我问自己和你,这是一种可接受的方法,还是愚蠢无知?

将缓存的数据存储在db或文件中是否更好(我考虑性能和并行命中).我的意思是,在最坏的情况下,我最终会有60.000个缓存文件.

我更喜欢带有所有数据的预先计算的表,但正如我所说,它需要很长时间,我不知道如何优化它. (等到SQL Dude从假期回来^^)

感谢任何提示,意见.

顺便说一句.这是查询:

SELECT c.ArtNr as artnr , count(c.ArtNr) as rank, s.ArtNr as parent_artnr

FROM (

SELECT a.ID_order, a.ArtNr

FROM net_orderposition a

WHERE a.ArtNr = 'TT-PV0005'

) s

JOIN net_orderposition c

WHERE s.ID_order = c.ID_order AND s.ArtNr != c.ArtNr

GROUP BY c.ArtNr

ORDER BY rank DESC,c.Stamp DESC

LIMIT 10;

编辑:

我想到了给定的答案,我认为它们与我最初的想法相似.

上面的代码结果如下表所示:

ID,ParentID , ChildID , Rank

1, TT-PV0005, TT-PV0040, 220

2, TT-PV0005, TT-PV0355, 135

3, TT-PV0005, TT-PV0450, 134

4, TT-PV0005, TT-PV0451, 89

5, TT-PV0005, RH-01V2 , 83

6, TT-PV0005, TT-PV0041, 83

7, TT-PV0005, TT-PV0353, 82

8, TT-PV0005, TT-PV0037, 80

ParentID是当前项,ChildID是过去订购的项目以及ParentID,Rank是预计算的子项与当前项目一起订购的次数.

现在我可以在每个新订单上更新或插入相关项目,如果它已经存在于DB中,则计算Rank.

我唯一担心的是,我会在一张非常大的牌桌上结束.

也许这应该不是问题,如果我每周离线预先计算一次?

但是我必须优化查询,因此每个项目不需要10秒.

你怎么看?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值