使用eDisMax通过多个字段加权分数的总和计算最终分数

时间:2013-01-26 16:27:12

标签: solr lucene

我想通过将多个字段分数的加权分数相加来计算每个文档的最终分数,而不是像edisMAx查询分析器那样获得MAX。

所以,如果我有三个字段,标题和描述,我希望我的最终得分是这样的:

最终分数= w1 * title_field_score +(1-w1)* description_field_score +(1-w1 -w2)* description_field_score

其中w1,w2可以是0到1之间的值。

没有任何相似性的默认相似度给出ranking。这使用以下搜索处理程序:

  <requestHandler name="/select" class="solr.SearchHandler">
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <int name="rows">10</int>
   <str name="df">detail_page_text</str>

   <!-- Query settings -->
   <str name="defType">edismax</str>
   <str name="qf">
      job_title description detail_page_text
   </str>

现在通过使用如下所示的平局,似乎我们得到了理想的ranking

<str name="tie">1.0</str>

所以我的问题是,如果使用tie参数是基于所有字段equaly(或使用额外权重)实现weigthed排名分数的正确方法。

任何提示都会非常感激! 干杯

2 个答案:

答案 0 :(得分:3)

Dismax tie是您应该用于加权评分的参数。

tie = 1.0 - &gt;所有个人得分的总和。

19.07% 0.69268036 (MATCH) **max plus 1.0 times** others of:
    1.96% 0.07105611 detail_page_text:senior
    4.16% 0.15101658 description:senior
    12.96% 0.4706077 job_title:senior

tie = 0.0 - &gt;个人得分的最大值。

17.83% 0.7043001 (MATCH) **max** of:  
    - 0.028197879 detail_page_text:senior  
    - 0.04566047 description:senior  
    - 17.83% 0.7043001 job_title:senior

答案 1 :(得分:1)

在实践中,使用tie=1.0应该可以很好地运作。我不确定这是否与标准的lucene查询有什么不同(我不知道,特别是,如果coord会产生不同的影响)。

在语义上看起来有点尴尬。默认情况下,它似乎使用dismaxedismax查询。将其设置为使用默认的Lucene查询似乎是更直接的方法,例如deftype=lucene&query=fooseen here)。