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)。我有哪些选择来实现这个想法的相关性?我认为既不是“资历”的参数,也没有功能提升支持这一点。谢谢!
在我看来,这是做到这一点是使用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_
挂钩工作。
P.S:它应该是可能的(虽然我没有测试过),以q
的内容移动到qf
参数,这样你就不必使用_val_
钩:
qf=add(query($qq1),product(query($qq2),${tie2}))