Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 在Solr中使用多层查询_Search_Solr_Lucene_Full Text Search_Relevance - Fatal编程技术网

Search 在Solr中使用多层查询

Search 在Solr中使用多层查询,search,solr,lucene,full-text-search,relevance,Search,Solr,Lucene,Full Text Search,Relevance,Solr“qf”参数的工作原理如下: score1 = winner1_score + tie_1 * loser1_score score2 = winner2_score + tie_1 * loser2_score final score = score1 + tie_2 * score2 假设我有:query=“sid”和qf=[field1,field1\u-edge,field2,field2\u-edge] Solr分数计算如下: score1 = winner1_score

Solr“qf”参数的工作原理如下:

score1 = winner1_score + tie_1 * loser1_score
score2 = winner2_score + tie_1 * loser2_score

final score = score1 + tie_2 * score2
假设我有:
query=“sid”
qf=[field1,field1\u-edge,field2,field2\u-edge]

Solr分数计算如下:

score1 = winner1_score + tie_1 * loser1_score
score2 = winner2_score + tie_1 * loser2_score

final score = score1 + tie_2 * score2
最大值(f1,f1,f2,f2)+tie*(其他三个字段的总和)
其中:
“tie”位于[0,1]

让我们调用:
winner1=最大值为(f1,f1_e)的字段
winner2=具有最大值的字段(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
函数,它允许您将函数应用于查询。 您可以将其与嵌套查询解析器相结合,后者允许您运行多个Demax查询

您可以这样做(根据需要设置
tie1
tie2
):

如果使用Solr 7.2(或更高版本),还需要设置
uf=\u query.*
,以便
\u val.
钩子工作

附言:应该可以(尽管我没有测试过)将
q
的内容移动到
qf
参数中,这样您就不必使用
\u val\ucode>钩子:


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

您是在问如何使用为每个字段计算的单独分数,还是如何使用
max()
函数,将多个预定义字段中的值(存储在名为
field1\u score
的字段中)作为分数?@MatsLindh,我感兴趣的是使用不同领域的分数在离散的步骤中进行比较。例如,在步骤1中,我想比较2个不同形式的特定<代码>字段< /代码>的分数,并决定要考虑哪一个。在第二步中,我想把第一步的优胜者分为不同的领域,并对他们进行比较。但是每个领域的分数应该用正常的分数计算吗?这与使用
dismax
edismax
查询解析器类似吗?(这将创建不相交的查询,并使用每个子查询的最大值作为查询分数)是,使用DisMax或eDisMax解析器中的任何一个,使用正常分数对每个字段进行评分。我想创建不相交的查询并多次从每个子查询中获取最大值。我看不到差异-最大值(s1,s2)与
max(field1\u分数,field1\u边缘\u分数,field2\u分数,score\u field2\u边缘\u分数)相同
这与从每个子查询中获取最大值相同,不是吗?“不止一次使用最大值”仍然是相同的最大值,不是吗?您是否可以添加示例,说明您想要的不同于Demax查询解析器提供的内容,以及您希望在示例中对查询进行评分的适当示例?这是一个很好的答案,正如solr 6.6中所宣传的那样。请注意,将函数直接放在
qf
字段中对我不起作用。