1

我的网站提供了大量标记和分类的内容,我正在尝试创建一个强大的算法来使内容符合用户需求。用户可以选择他们最感兴趣的标签,并且与这些标签匹配的内容被给予更高的优先级。此外,内容可以被“喜欢”(将其优先推高),而时间衰减会将其推低优先级。因此,最终,用户应该看到与他们感兴趣的内容相一致的相对较新的内容,并且也受到其他用户的欢迎。

当前算法的工作原理如下:

  1. 从桌子上拉出所有物品content。为每个项目分配 1 分。
  2. 检查content_tagsuser_tags查看从步骤 1 中提取的数组中是否存在匹配项。如果是,则将乘数应用于该项目的分数。
  3. 检查content_likes每个项目有多少喜欢。根据此金额应用另一个乘数。
  4. 根据项目的时间衰减应用第三个因素。显然,旧物品比新物品受到更大的惩罚。
  5. 按总分排序。结果数组应该首先包含最相关的项目。然后,我可以简单地将这个数组缩减为 20 个左右的项目并将它们显示在页面上。

正如您可能知道的那样,这是一个缓慢的算法,它不仅必须运行查询来提取每一条内容,而且还必须运行单独的查询来检查content_tagsuser_tagscontent_likes。查询太多!

我想我的第一个问题是:我做错了吗?除此之外,您能想出任何方法来优化我上面总结的所有内容吗?该算法本身运行良好,假设项目和用户具有相关标签。但我担心当我的content桌子增长到几万件时,我会一团糟。

谢谢你的帮助!

4

1 回答 1

2

使用许多查询会减慢您的页面速度。尝试将它们组合成尽可能少,并请在您的 mysql-tables 上使用索引!您会注意到创建索引肯定会影响页面的加载时间。

于 2012-12-19T17:58:41.697 回答