【问题标题】:Combine solr's document score with a static, indexed score将 solr 的文档分数与静态的索引分数相结合
【发布时间】:2013-08-26 17:39:58
【问题描述】:

我让人们根据他们编写的文档将他们编入 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 中是一项足够常见的任务。我已经把头撞在墙上一段时间了,任何想法都将不胜感激。

【问题讨论】:

    标签: solr information-retrieval


    【解决方案1】:

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

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

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

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

    抱歉,暂时没有更好的主意。

    【讨论】:

    • 我会试一试的。仍然很奇怪,这样的功能无法通过不需要编写自定义组件的更简单机制获得。
    猜你喜欢
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多