在 Solr 中使用多层查询

Using multi-layer queries in Solr

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" 参数和函数提升都不支持这一点。 谢谢!

在我看来,这样做的方法是使用 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_ 挂钩工作。

P.S:应该可以(虽然我还没有测试过)将 q 的内容移动到 qf 参数中,这样你就没有使用 _val_ 挂钩:

qf=add(query($qq1),product(query($qq2),${tie2}))