在Solr中使用多层查询

时间:2018-12-27 11:08:28

标签: search solr lucene full-text-search relevance

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”参数和功能提升都不支持此功能。 谢谢!

1 个答案:

答案 0 :(得分:1)

在我看来,做到这一点的方法是使用query函数,该函数允许您将函数应用于查询。 您可以将其与嵌套查询解析器结合使用,从而可以运行多个dismax查询。

您可以执行以下操作(根据需要设置tie1tie2

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_