1

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

因此,如果我有三个字段;标题和描述,我希望我的最终分数是这样的:

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

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

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

  <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>

现在通过使用下面的领带,似乎我们得到了一个理想的排名

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

所以我的问题是使用 tie 参数是否是基于所有字段相等(或附加权重)获得加权排名分数的正确方法。

任何提示将不胜感激!干杯

4

2 回答 2

3

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

tie = 1.0 -> 所有个人分数的总和。

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 -> Max of the Individual Scores.

17.83% 0.7043001 (MATCH) **max** of:  
    - 0.028197879 detail_page_text:senior  
    - 0.04566047 description:senior  
    - 17.83% 0.7043001 job_title:senior
于 2013-02-01T04:56:58.633 回答
1

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

从语义上看,它似乎有点尴尬。默认情况下,它似乎使用dismaxoredismax查询。将其设置为使用默认的 Lucene 查询似乎是更直接的方法,例如deftype=lucene&query=foo参见此处)。

于 2013-01-26T17:24:02.513 回答