2011-01-14 26 views
0

我建立一个像亚马逊的“购买该同时购买产品”功能“购买该同时购买产品”。我有大约6年的订单来挖掘这些数据,并且显然会继续使用新订单的数据进行更新。如何存储

的几个问题浮现在脑海中:

  1. 如何存放这些关系?我正在考虑一个带有productA,productB和count(或rank)的简单表。这足够吗?
  2. 我不认为旧数据与新数据相关。我如何优先考虑更新的数据?

编辑:这个网站只销售一种类型的产品,所以几乎所有的东西都是相关的,不需要过滤。我也希望尽可能简单 - 数据已经存在于我的数据库中,我正在寻找最简单的方法来计算和存储它。

回答

0

看看http://taste.sourceforge.net/

味道是一种灵活,快速 协同过滤的 Java引擎。该引擎会考虑用户对项目的偏好 (‘口味’)和 收益预计为其他 项目的偏好。例如, 卖书或CD的网站可以很容易地使用 味道搞清楚,从过去的 购买数据,该CD的顾客 可能有兴趣听。

谷歌还有一个可以为你的用例量身定做的预测api。检查他们的scenarios here

0

“如何存放这些关系?我想与产品A,产品B一个简单的表格,并计算(或等级)。这是足够了吗?”

这是不够的,真的。最好的方法是使用对象的语义

因此,获取与对象关联的数据(例如,对于一本书:它是一本书,由xxx编写,书写风格,书的种类......),以及请参阅与其他数据的关系,这些数据会将您带到另一个对象(例如,此类书籍与此类相关,或此艺术家与此艺术家或这两者等等)。这是一项非常艰苦的工作。

后,你可以选择做自己,但它可能不会像很多有关你想要的。

我真的觉得你应该看到的已经存在(在SourceForge上或github上为例)。

+0

为什么它不够?这个网站只销售一种类型的物品,所以除了他们一起购买的事实,我不需要太多。 – Yisroel 2011-01-14 05:25:48

0

我个人不会存储这些数据。我会创建一个动态选择要建议的产品的视图。

一个简单的实现可能是:

  1. 选择的人谁也买了同样的产品(例如1000)
  2. 基于这些是什么,他们都买了前N个产品的用户有代表性的人数。
  3. 将这些产品推荐给用户。

您可以通过删除第2步来简化它,这样您就可以显示其他已购买的产品,无论其受欢迎程度如何。

正如Simon Marc所建议的那样,您可以通过按照标准筛选产品来使其更加复杂。

至于较旧的数据,也许项目可能有按日期使用或冗余标志,这意味着他们从选择过滤。

1

您可以使用easyrec来完成您的任务。它的意志关系存储格式如下:

CREATE TABLE `itemassoc` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `tenantId` int(11) NOT NULL DEFAULT '0', 
    `itemFromId` int(11) NOT NULL DEFAULT '0', 
    `itemFromTypeId` int(11) unsigned NOT NULL DEFAULT '0', 
    `assocTypeId` int(11) unsigned NOT NULL DEFAULT '0', 
    `assocValue` double NOT NULL DEFAULT '0', 
    `itemToId` int(11) NOT NULL DEFAULT '0', 
    `itemToTypeId` int(11) unsigned NOT NULL DEFAULT '0', 
    `sourceTypeId` int(11) NOT NULL DEFAULT '0', 
    `sourceInfo` varchar(250) DEFAULT '0', 
    `viewTypeId` int(11) unsigned NOT NULL DEFAULT '0', 
    `active` tinyint(1) NOT NULL DEFAULT '1', 
    `changeDate` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `unique_itemassoc` (`tenantId`,`itemFromId`,`itemFromTypeId`,`itemToId`,`itemToTypeId`,`assocTypeId`,`sourceTypeId`), 
    KEY `idFrom_assoc` (`itemFromId`,`itemFromTypeId`,`assocTypeId`,`tenantId`), 
    KEY `recommender` (`itemFromId`,`itemFromTypeId`,`itemToTypeId`,`assocTypeId`,`tenantId`,`active`) 
) ENGINE=InnoDB AUTO_INCREMENT=38480 DEFAULT CHARSET=latin1 COMMENT='Table containing item associations' 

这基本上

  1. 是意达
  2. ASSOCTYPE(例如:BOUGHT_TOGETHER)
  3. ITEMB
  4. ASSOC值(强度推荐)

easyrec可以导入您的“购买行为”并从中计算出规则。