将solr的文档分数与静态的索引分数相结合

时间:2013-08-26 17:39:59

标签: solr information-retrieval

我根据他们撰写的文档将人们编入索引。为简单起见,假设它们有三个字段 - 整数ID,文本字段和浮点'SpecialRank'(介于0和1之间的值以表示该人有多么伟大)。 solr中的相关性匹配都是通过Text字段完成的。但是,我希望我的最终结果列表是solr和我自己的SpecialRank提供的与查询相关的组合。也就是说,我需要根据以下公式对结果进行重新排名:

finalScore = (0.8 * solrScore) + (0.2 * SpecialScore)

据我所知,这是信息检索中的一项常见任务,因为我们只是以加权方式组合两个不同的分数。麻烦的是,我需要对solrScore进行规范化以使其正常工作。我一直在做的是根据特定查询的maxScore对solrScore进行规范化,并对结果客户端进行重新排名。这一切都运行正常,但意味着我必须在进行重新排名之前从solr中检索所有匹配的文档。

我正在寻找让solr处理这种重新排名的最佳方式。升压功能能够在这里提供帮助吗?我已经读过它们可以是乘数或加法得到的solr得分,但由于solr得分没有标准化并且在整个地方取决于不同的查询,这似乎并不能解决我的问题。我尝试过的另一种方法是首先查询solr以获取maxScore,然后使用以下公式进行排序:

sum(product(0.8,div(score,maxScore)),product(0.2,SpecialRank))+desc

当然,这不起作用,因为您无法将分数用作排序函数中的变量。

我在这疯狂吗?当然,这是IR中常见的任务。我现在已经把头撞到墙上一段时间了,任何想法都会非常感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试实施自定义SearchComponent,它将在Solr上显示结果并在那里计算您的自定义分数。从ResponseBuilderrb.getResults().docSet)中获取结果,迭代它们,将计算值添加到结果中并重新排序。

然后,您可以在SearchComponent链中注册RequestHandler作为最后一个:

<arr name="last-components">
  <str>elevator</str>
</arr>

SolR手册中的更多信息: http://wiki.apache.org/solr/SearchComponent

抱歉,但现在还没有更好的主意。