我正在尝试在 APACHE SOLR 中实现一个逻辑,以便超过 2 年的文档应该根据天数或月数的差异受到惩罚。
我正在使用这个增强功能,这是我在谷歌搜索后得到的。
recip(ms(NOW,publicationDate),3.16e-11,1,1) // Currently it is set to use 1 year
任何人都可以确认这是惩罚旧文件还是什么?
谢谢
我正在尝试在 APACHE SOLR 中实现一个逻辑,以便超过 2 年的文档应该根据天数或月数的差异受到惩罚。
我正在使用这个增强功能,这是我在谷歌搜索后得到的。
recip(ms(NOW,publicationDate),3.16e-11,1,1) // Currently it is set to use 1 year
任何人都可以确认这是惩罚旧文件还是什么?
谢谢
recip(x,m,a,b)
与实施的互惠函数a/(m*x+b)
。m,a,b 是常数,x 是任何数值字段或任意复杂的函数。
如果是您的参数,您的函数将如下所示:
f(x) = 1 /(3.16e-11*x + 1)
函数
ms
返回其参数之间的毫秒差异。日期相对于 Unix 或 POSIX 时间纪元,即 UTC 1970 年 1 月 1 日午夜。
想象一下,您的发布日期是 2015 年 9 月 1 日,ms 会告诉我们 NOW = 1507725936061,发布日期是 1441065600000,整个结果将在 0.3 左右,这将是本文档的分数。
对于昨天的发布日期,我们将得到 0.99 的分数,这导致了这个想法,因此,这个公式将惩罚每个文档,而不仅仅是 2 岁的文档。例如,对于 1 年前的同一天,分数将为 0.5
我可能会考虑按此功能进行排序(从 Solr 6 开始)
if(gt(ms(mydatefield,NOW-2YEARS),0),1,recip(ms(NOW,publicationDate),3.16e-11,1,1))
我没有测试它(不确定 NOW-2YEARS 部分),但基本上,我正在这样做:
if mydatefield - NOW-2YEARS greater
than 0 => score will be 1.0
else => I'm calculating reciprocal function
最后一点:一年中有3.16e10
几毫秒,因此可以将日期倒数缩放为一年的小数部分,或者3.16e-11
,对于 2 年,您可以选择不同的值。