在 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 查询。
你可以这样做(根据你的需要设置 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}))
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 查询。
你可以这样做(根据你的需要设置 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}))