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