我在电影推荐引擎工作,我正面临数据库设计问题。我的实际数据库如下所示:
MOVIES [ID,TITLE]
KEYWORDS_TABLE [ID,KEY_ID]
- 其中 ID 是 MOVIES.id 的外键,KEY_ID 是文本关键字表的键
这不是整个数据库,但我在这里展示了对我的问题重要的内容。我有大约 50,000 部电影和大约 1,300,000 个关键字相关性,基本上我的算法包括提取所有与给定电影具有相同关键字的人,然后按关键字相关性的数量对它们进行排序。
例如,我查找类似于“Cast away”的电影,它返回“六天六夜”,因为它具有最多的关键字相关性(4 个关键字):
Island
Airplane crash
Stranded
Pilot
该算法基于更多的因素,但这一因素对于该方法来说是最重要和最困难的。
基本上,我现在所做的是获取所有至少有一个关键字与给定电影相似的电影,然后按其他暂时不重要的因素对它们进行排序。
如果没有这么多的记录不会有任何问题,一个查询在许多情况下持续长达 10-20 秒,其中一些甚至返回超过 5000 部电影。有人已经在这里帮助我(感谢 Mark Byers)优化查询,但这还不够,因为它需要的时间太长
SELECT DISTINCT M.title
FROM keywords_table K1
JOIN keywords_table K2
ON K2.key_id = K1.key_id
JOIN movies M
ON K2.id = M.id
WHERE K1.id = 4
所以我认为如果我为每部电影预先制作带有电影推荐的列表会更好,但我不确定如何设计表格..这是一个好主意还是你会如何采用这种方法?