gpt4 book ai didi

javascript - 如何按 "Trending"对搜索结果进行排序?

转载 作者:行者123 更新时间:2023-11-30 22:40:38 25 4
gpt4 key购买 nike

在我的例子中,我想根据趋势过滤搜索结果(仅基于投票与时间)。

以下是一些实现“趋势排序”的网站示例:

http://8tracks.com/explore/all

https://news.ycombinator.com/news

https://www.reddit.com/

我看到的两个选项:

<强>1。即时计算分数(在每次页面加载时)

这是我目前的解决方案。每个页面加载都会调用 MySQL 查询并计算表中每一行的分数。这似乎是最准确、实时的方法。问题是要比较的项目越多,花费的时间就越长。现在大约有 120 万行,需要 3 秒多的时间。在生产场景中,我的目标是 < 100-300 毫秒。

<强>2。安排任务每 X 分钟运行一次并预先计算分数

这似乎是一个很好的解决方案,但我看到的一个非常明显的问题是您将结果存储在哪里?更新数据库中的每一行需要很长时间(我有大约 120 万行)。

广泛的谷歌搜索帮助我确定了使用哪种趋势算法,但没有帮助我确定如何在生产场景中实现它。

这是我的数据库的一个简单示例:

table_topic
id
title


table_upvotes
topic_id
user_id
created_at

这里是实际的评分算法(http://amix.dk/blog/post/19574):

exports.hackerHot = function (gravity) {
if (gravity == null) {
gravity = 1.8;
}
return function (votes, itemDate) {
var hourAge = (Date.now() - itemDate.getTime()) / (1000 * 3600);
return (votes - 1) / Math.pow(hourAge + 2, gravity);
};
};

最佳答案

如果基于时间,例如“趋势”为“在过去 24 小时内获得很多赞成票”,如果您只计算相关行而不是整个数据库的分数,您应该会得到很好的性能提升,从而使其可以即时制作。

我理解的唯一其他解释是按赞成票数排序,所以这也不应该花费太多时间,所以也应该可以即时进行。

如果您想要更详细的答案,则必须详细说明您选择实现的确切算法。

关于javascript - 如何按 "Trending"对搜索结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com