我的网站提供了大量标记和分类的内容,我正在尝试创建一个强大的算法来使内容符合用户需求。用户可以选择他们最感兴趣的标签,并且与这些标签匹配的内容被给予更高的优先级。此外,内容可以被“喜欢”(将其优先推高),而时间衰减会将其推低优先级。因此,最终,用户应该看到与他们感兴趣的内容相一致的相对较新的内容,并且也受到其他用户的欢迎。
当前算法的工作原理如下:
- 从桌子上拉出所有物品
content
。为每个项目分配 1 分。 - 检查
content_tags
以user_tags
查看从步骤 1 中提取的数组中是否存在匹配项。如果是,则将乘数应用于该项目的分数。 - 检查
content_likes
每个项目有多少喜欢。根据此金额应用另一个乘数。 - 根据项目的时间衰减应用第三个因素。显然,旧物品比新物品受到更大的惩罚。
- 按总分排序。结果数组应该首先包含最相关的项目。然后,我可以简单地将这个数组缩减为 20 个左右的项目并将它们显示在页面上。
正如您可能知道的那样,这是一个缓慢的算法,它不仅必须运行查询来提取每一条内容,而且还必须运行单独的查询来检查content_tags
、user_tags
和content_likes
。查询太多!
我想我的第一个问题是:我做错了吗?除此之外,您能想出任何方法来优化我上面总结的所有内容吗?该算法本身运行良好,假设项目和用户具有相关标签。但我担心当我的content
桌子增长到几万件时,我会一团糟。
谢谢你的帮助!