您知道人们如何寻找相似或推荐的电影或电视节目吗?

http://www.anime-planet.com/anime/devil-may-cry

看看它在底部如何共享推荐的动画,并且它们作为建议相互链接,因此,如果在B上将A链接到B,您也可以看到A,并且
A到B
企业对企业
C不是

我的问题是如何最好地处理这些项目?

Listings_Table


list_id
list_title
list_content


推荐表


list_id_A
list_id_B


尽管我认为这种方法会造成很多重复,但我认为查询也会有些混乱。任何建议表示赞赏。

最佳答案

您所指的是一个相对简单的推荐引擎。对于小型数据集(您在其中手动分配建议)(A指向B且B指向C),它会很好用,但是这不是一个非常可扩展的方法。一旦您发现的产品数量过少,就变得难以维护(我认为)。

您可能会发现,为您提供更好的服务是使用稍微复杂一点的东西。让我们看看人们如何使用Google的Prediction api(http://code.google.com/apis/predict/docs/samples.html#demos)之类的东西来进行这种预测。在这种情况下,您将不会存储实际的链接,而是存储用户喜欢的链接,然后查看该信息以建立您的建议。

虽然Prediction API并不是适合所有人的完美解决方案,但它为您提供了一种非常简单的方法来构建站点的推荐部分,而无需深入学习机器学习技术。

至于上面的表结构,如果您这样做就不需要重复数据。相反,我的建议是,您在Recommendations_table的两列中都查找正在使用的元素。

例如,如果您在“ Recommendations_table”中具有以下记录

list_id_A, list_id_B
1, 2
9, 12
2, 3


您可以使用联合查询来获取与“ 2”相关的所有内容,例如:

select list_id_A from recommendations_table where list_id_B = 2
union
select list_id_B from recommendations_table where list_id_A = 2


另外,您可以添加更多sql以确保仅返回唯一结果。但最后,您将如何填充这些信息,因为这可能比其他任何事情都带来更大的改变。

如果您要更进一步,并使用诸如Cassandra之类的nosql数据存储之类的其他技术,则可能会有一个称为“建议”的列族,并且您的键将是正在查看的电影。然后,后续的列名称将是推荐的电影ID。在这种情况下,结构将具有以下内容:

Key, columns.....
Movie A, 4, 5, 67,1, 9,3
Movie B, 3, 4, 1


在这种情况下,您将拉出特定键的所有列名,这将是您的推荐列表。

所有这些实际上都是学术上的,无需知道您打算如何填充数据。

关于mysql - “建议”表结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5146671/

10-12 12:49