我有一个相当标准的搜索查询来查找相关内容。除此之外,它根据文章标题和内容以及类别等的相关性来分配分数。所有这些都是相当标准的东西。我还想根据文章的发布日期添加加权“新鲜度”。
如何将文章的已发布“日期时间”减少到可以作为总体分数的一部分进行比较的分数。注意:分数需要按照 MATCH () AGAINST 等顺序排列。
现有分数选择:
SELECT *,
MATCH (content) AGAINST ( 'some keywords from content') ) *1 +
(MATCH ( title ) AGAINST ( 'some kewords from title ') ) * 1.5 +
COUNT( matching_terms ) *3, 1 ) / 5.5
AS score
FROM ....`
Run Code Online (Sandbox Code Playgroud)
以下函数将日期差异缩小到给定的预期值范围,范围为 3 年期间从 0.5 到最大约 3。然后可以为其赋予负权重以选择新鲜度。
SELECT *, (LN(LN(-1/(datediff(published_time, now())+1)) + 1)
Run Code Online (Sandbox Code Playgroud)
三年内的成绩。
一个多月的成绩
两个 LN() 函数用于确保 5-6 范围内存在上限,使其远小于典型的比赛得分。它还对其进行加权,使得 2 周内更新的文章更受青睐。单个 LN() 的范围约为 0.5 - 9,特别优选前 30 天。