【发布时间】:2019-05-25 10:11:03
【问题描述】:
Solr "qf" 参数的工作原理如下:
假设我有:query = "sid" 和 qf = [field1, field1_edge, field2, field2_edge]。
Solr 分数计算如下:
max(f1, f1_e, f2, f2_e) + tie * (sum of other 3 fields) 其中:"tie" lies in [0,1]
让我们致电:winner1 = field with max(f1, f1_e) 和
winner2 = field with max(f2, f2_e)
我想对 Solr 中的给定查询进行如下评分:
score1 = winner1_score + tie_1 * loser1_score
score2 = winner2_score + tie_1 * loser2_score
final score = score1 + tie_2 * score2
实际上,我想在两层中应用qf(采用 tie_1 = 0 和 tie_2 = 1)。我有什么选择来实现这种相关性的想法?我认为“qf”参数和功能提升都不支持这一点。
谢谢!
【问题讨论】:
-
您是在问如何使用为每个字段计算的单独分数,或者如何将
max()函数与值一起使用(存储在名为field1_score的字段中,等等。 ) 从多个预定义字段作为分数? -
@MatsLindh 基本上,我有兴趣使用不同字段的分数在离散的步骤中比较它们。例如,在第 1 步中,我想比较特定
field的 2 种不同形式的分数,并决定要考虑哪一种。在第 2 步中,我想对不同领域的第 1 步的获胜者进行比较。 -
但是每个字段的分数应该使用正常评分计算吗?这是否类似于使用
dismax或edismax查询解析器? (创建分离查询并使用每个子查询的最大值作为查询的分数) -
是的,每个字段都使用 DisMax 或 eDisMax 解析器中的任何一个使用正常评分进行评分。我想创建分离查询并多次从每个子查询中获取最大值。
-
我看不出区别 - max(s1, s2) 与
max(field1_score, field1_edge_score, field2_score, score_field2_edge_score)相同,这与从每个子查询中获取最大值相同,不是吗?而且“多次取最大值”仍然是相同的最大值,不是吗?您能否添加示例来显示您想要的与 dismax 查询解析器提供的内容不同的内容,以及您希望在示例中对查询进行评分的正确示例?
标签: search solr lucene full-text-search relevance