Solr中采用多层查询

问题描述 投票:0回答:1

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)。我有哪些选择来实现这个想法的相关性?我认为既不是“资历”的参数,也没有功能提升支持这一点。谢谢!

search solr lucene full-text-search relevance
1个回答
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_挂钩工作。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.