我正在尝试将 future 某个特定日期的记录提升到结果的顶部,并使那些过去日期的相关性降低。我看过很多关于如何提高结果的帖子,这些帖子离现在很近,但这并不是我真正需要的。
最佳答案
你想做的是:
- 了解日期是将来的日期还是过去的日期
- 针对每种情况使用不同的 boost 函数
假设字段名称为due_date,我们将开始构建您的查询。
首先,您想要获得时差。
&timediff=ms(due_date,NOW)
您可以使用 NOW/HOUR、NOW/DAY 来获得更好的性能
其次,我们需要知道持续时间是正数还是负数:将数字与其绝对值相加将返回 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 参数比过去的boost 多 10 倍,这将为 future 的文档提供比过去更高的提升。 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
关于search - 如何编写 Solr FunctionQuery 来增强包含 future 日期的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21315138/