search - 如何编写 Solr FunctionQuery 来增强包含 future 日期的文档?

标签 search solr relevance

我正在尝试将 future 某个特定日期的记录提升到结果的顶部,并使那些过去日期的相关性降低。我看过很多关于如何提高结果的帖子,这些帖子离现在很近,但这并不是我真正需要的。

最佳答案

你想做的是:

  1. 了解日期是将来的日期还是过去的日期
  2. 针对每种情况使用不同的 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/

相关文章:

search - TicTacToe 战略减少

http - 我需要使用 http 重定向代码 302 还是 307?

python 字符串搜索替换

php - 在 PHP 中高效的平面文件搜索

solr - 分布式 Solr 配置中的复制

java - 将 Apache Nutch 2.3 与 Hbase 0.94.14 和 Solr 5.2.1 集成时出错

solr - 使用 SolrNet 从控制台应用程序查询 Solr?

php - 按相关性进行 boolean 全文搜索顺序似乎不起作用

php - 具有跨多个表的相关性的站点搜索的好例子 (php/mysql)

elasticsearch - Elasticsearch -根据外部因素更改相关性