Solr - 按多值字段上的OR搜索的最大匹配对结果进行排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr - 按多值字段上的OR搜索的最大匹配对结果进行排序相关的知识,希望对你有一定的参考价值。
让我试着解释我的问题,让我们假设我在每个文档中都有一个名为“enrollment”的多值字段,其中包含学生的名字。
现在在搜索Solr的时候,让我说我搜索了三个学生的名字 - Manish,Amit,Navin。现在Solr返回包含这些名称中的任何一个的所有文档(在我的情况下显然是需要的)。现在一些文件可能包含全部3个,或者其中2个或其中1个。我希望这些文档/结果按顺序排序,使得具有最大匹配的文档将位于顶部,然后是较少数量的匹配。
我尝试为此添加sort:score desc,但它无法正常工作,因为所有匹配文档的得分均为“1”。
如何通过我的多值字段的最大匹配数来实现排序顺序?
给定一个多值整数字段,您希望根据匹配数对文档进行排名,为每个匹配应用一个提升查询。例如,如果你有一系列不同大小的显示器,你可以为每个有效的大小应用一个提升(我将它一起攻击并使用来自技术核心的示例文档进行测试,这就是我的例子和我坚持下去。我有两个相关的文件,一个名为VA902B
,sizes
作为多值字段给出,值为23,28和32,一个名为3007WFP
,值为23,29,36,在同一个字段中。
在这里我要求任何文件,但是给我那些尺寸为28和23的顶部,然后是那些尺寸为28或尺寸为23,然后是任何其他文件的文件:
?bq=sizes:28&bq=sizes:23&defType=edismax&q=*:*
如果我想将文档集限制为只匹配任何大小的文档,我可以将其用作我的主要查询:
?defType=edismax&q=sizes:(23%2028)
..而且我发现你无论比赛次数多少,你的分数是相同的假设都是假的。将&debugQuery=true
添加到URL为我们提供了每个文档的详细评分信息:
"explain": {
"VA902B": "
2.0 = sum of:
1.0 = sizes:[23 TO 23]
1.0 = sizes:[28 TO 28]
",
"3007WFP": "
1.0 = sum of:
1.0 = sizes:[23 TO 23]
"
},
..这意味着不需要应用提升 - 您想要的行为是Solr的标准行为。这是我最初的想法,但是应该通过您在评论中提供的查询给出正确答案。
但是我会告诉你我应用提升的策略是如何运作的:
?bq=sizes:28&bq=sizes:23&defType=edismax&q=sizes:(23%2028)&debugQuery=true
..现在告诉我们每个文档的分数实际上已经翻了一倍,因为每次匹配得分为1.0(来自查询)+ 1.0(来自提升)。
"explain": {
"VA902B": "
4.0 = sum of:
2.0 = sum of:
1.0 = sizes:[23 TO 23]
1.0 = sizes:[28 TO 28]
1.0 = sizes:[28 TO 28]
1.0 = sizes:[23 TO 23]
",
"3007WFP": "
2.0 = sum of:
1.0 = sum of:
1.0 = sizes:[23 TO 23]
1.0 = sizes:[23 TO 23]
"
},
我还使用标准的lucene查询解析器测试了q=sizes(23 28)
查询(而不是支持bq
的dismax / edismax),行为是相同的。
以上是关于Solr - 按多值字段上的OR搜索的最大匹配对结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章