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”参数和功能提升都不支持此功能。
谢谢!
答案 0 :(得分:1)
在我看来,做到这一点的方法是使用query
函数,该函数允许您将函数应用于查询。
您可以将其与嵌套查询解析器结合使用,从而可以运行多个dismax查询。
您可以执行以下操作(根据需要设置tie1
和tie2
)
q=_val_:"add(query($qq1),product(query($qq2),${tie2}))"
qq1={!edismax qf='field1 field1_edge' v='sid' tie=${tie1}}
qq2={!edismax qf='field2 field2_edge' v='sid' tie=${tie1}}
tie1=0.5
tie2=0.3
如果您使用的是Solr 7.2(或更高版本),则还需要设置uf=_query_ *
才能使_val_
挂钩正常工作。
PS:应该可以(尽管我还没有测试过)将q
的内容移到qf
参数中,这样您就不必使用{{1 }}钩子:
_val_