我试图在未来最接近现在的特定日期推动记录到结果的顶部,并使那些过去日期不太相关的记录。我已经看过一些关于如何提高结果的帖子,这些结果已经接近现在,但这并不是我真正需要的。
答案 0 :(得分:3)
您想要做的是:
假设字段名称为 due_date ,我们将开始构建您的查询。
首先,你想得到时差。
&timediff=ms(due_date,NOW)
您现在/现在可以使用NOW / HOUR,以获得更好的性能
其次,我们需要知道持续时间是正还是负:在正数上加一个数字将在正数时返回1 / true,在负数时返回0 / false。
&future=sum($timediff,abs($timediff)
现在,根据数字是正数还是负数,您需要应用不同的增强功能。您可以在此处使用任何您想要的功能。
&futureboost=recip($timediff,1,36000000,36000000)
&pastboost=recip($timediff,1,3600000,3600000)
$finalboost=if($future,$futureboost,$pastboost)
&boost=$finalboost
请注意,futureboost参数比pastboost多10倍,这将比未来的文档提供更高的未来文档。 recip函数记录在Solr Function Query page上,您可以将futureboost和pastboost函数的参数调整到您的案例中。
要返回功能值,您可以使用:
&fl=_DATE_BOOST_:$finalboost
完整查询将是以上所有内容的组合:
&timediff=ms(due_date,NOW/HOUR)
&future=sum($timediff,abs($timediff)
&futureboost=recip($timediff,1,36000000,36000000)
&pastboost=recip($timediff,1,3600000,3600000)
$finalboost=if($future,$futureboost,$pastboost)
&boost=$finalboost
&fl=_DATE_BOOST_:$finalboost
答案 1 :(得分:0)
通过应用以下提升查询来解决它:
bq=movie_release_date:[NOW/DAY-1MONTH TO NOW/DAY+2MONTHS]^10
不像之前的答案那么准确,但如果你缺少Solr 4,它的结果几乎相同。