【问题标题】:Simple popular/trending products algorithm for an ecommerce site with Javascript使用 Javascript 的电子商务网站的简单流行/趋势产品算法
【发布时间】:2021-03-26 09:42:36
【问题描述】:

我目前正在构建一个小型电子商务网站,对于主页,我想根据受欢迎程度对产品进行排名。产品架构包含以下数据:

{
  ...
  noViews: Number,  // Number of times a user has clicked on the product
  avgRating: Number, // Average star rating (1 - 5)
  datePosted: Date // Date the product was posted
}

什么是(相对)简单的算法/代码,我可以用来实现这个(使用 Node.js),其中产品将根据受欢迎程度进行排名(考虑时间,因此内容不会过时)。

谢谢。

【问题讨论】:

    标签: javascript node.js mongodb algorithm rank


    【解决方案1】:

    首先,您需要一个基于时间的指标来解决这个问题。

    总体趋势产品没有多大意义,尤其是对于电子商务应用而言。

    比方说,您想查找某一天(比如说今天)的热门产品。

    现在这不是一个容易解决的问题。解决它的方法不止一种。对于每家公司,一种方法是有效的!

    理想情况下,这里的一个简单解决方案是根据各种因素组合创建一个分值。比如购买次数、浏览次数、点击次数等等。

    在这里,您有 datePosted 参数。现在,为此创建一个 date_score。所以,这里的基本想法是昨天发布的产品比一周前发布的产品得分更高。您输入的值需要针对您的算法自定义进行调整和检查。

    同样,为avgRatingnoViews 实现类似的分数。

    准备好这些分数后,为这些分数创建权重。现在这些 100 的加权平均值是最终得分。

    所以,最后一个示例解决方案:

    • 发布日期:

      • 如果日期在过去 3 天内(分数 = 100)
      • 如果日期是上周(分数 = 75)
      • 如果日期在前一周(分数 = 50)
      • 其他默认分数 = 25。
    • 星级:

      • (评分/5)*100
    • 观看次数:

      • 在这里,您可以使用百分位数。
      • 假设所有产品的最大浏览量为 x。
      • 那么,浏览量是 (views/x) *100

    现在,处理两个分数匹配时发生的极端情况。

    在此之后,您可以简单地按 score 参数排序。

    此外,请确保您所做的一切都是动态的,因为静态阈值通常不会提供很好的结果!

    【讨论】:

    • 谢谢。我知道我必须为 3 个因素创建一个矩阵,对于星级,这很容易(x/5 * 100),但是对于时间和 noViews,我如何将它们转换为分数(1 到 100 之间)?
    • @KingsleyKbcComics 发布了一个示例解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2013-09-11
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多