0

我让人们根据他们撰写的文档将他们编入 solr 索引。为简单起见,假设它们具有三个字段 - 一个整数 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 中是一项足够常见的任务。我已经把头撞在墙上一段时间了,任何想法都会非常感激。

4

1 回答 1

0

您可以尝试SearchComponent在 Solr 上实现自定义结果并计算您的自定义分数。获取从ResponseBuilder( rb.getResults().docSet) 中找到的结果,遍历它们,将计算值添加到结果中并重新排序。

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

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

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

抱歉,但目前没有更好的主意。

于 2013-08-27T10:14:53.227 回答