卢森搜索分数的最大值是多少?

4

我正在考虑使用StandardAnalyzer作为默认评分函数。

看起来有时候得到的值会超过1.0。

3个回答

9

没有真正的最高分。

当Lucene进行评分时,它基本上将一组得分相加以给出总得分。

例如:

假设我搜索 A OR B。该查询被拆分为其组成部分 - AB。使用子评分器独立地搜索每个查询的部分,并为相关查询的部分给出得分。如果一个文档包含 AB,则分数将是来自两个子评分器的得分的组合。

由于可以有许多子评分器,因此总分可以大于1。

特定命中的分数是绝对的,这意味着它仅可用于与同一搜索的最高分进行比较。不同搜索之间的分数不能直接比较。

如果确实需要介于0和1之间的值,则可以根据其值与搜索的最高分的比率来标准化每个分数。这将为您提供等效的百分比分数。但这些百分比无法在不同的搜索之间进行比较。

更多信息可以在这里这里找到。


5

分数的最大值取决于所执行的查询。要找出给定查询的最大分数,可以通过fl参数请求score字段,需要明确请求。

Ex Req: http://server:7983/solr/select/?q=term&fl=*,score

在您的响应中查找maxScore="xx.xxxx",这将根据查询、结果和相关性在1.0以上/以下。
Ex: <result name="response" numFound="29" start="0" maxScore="2.1740298">

重要的是要记住,分数本身并没有提供太多意义,但是将文档的相对分数与查询的maxScore进行比较时,它提供了价值。例如,如果文档#1的得分为1.9,而文档#27的得分为0.8,则当maxScore为"2.1740298"时,文档#1是远优于文档#27的匹配。
以下因素会影响评分:
- 逆文档频率 - 词项频率 - 协调因子 - 字段长度
此外,像索引时间提升和查询时间提升这样的功能也会影响如何计算分数。SolrRelevancy提供了一些解释。更详细的解释可以在这里找到Lucene Similarity。您可以打开调试选项来查看如何计算分数。
http://server:7983/solr/select/?q=term&fl=*,score&debugQuery=on

例子: 2.1740298 = fieldWeight(text:"mmdci bldleg 02" in 210), 的乘积为: 1.7320508 = tf(phraseFreq=3.0) 13.388552 = idf(text: mmdci=812 bldleg=264 02=6220) 0.09375 = fieldNorm(field=text, doc=210)

对于Lucene:

使用 TopDocs.getMaxScore()。返回所有匹配项的最高分数,当按相关性进行默认排序时。如果您按其他字段而不是相关性排序,则需要设置 doTrackScores(true)doMaxScore(true)


+1。谢谢您的详细解释。我不使用solr,而是直接使用lucene,因此我猜想有类似的方法可以获取给定查询的maxScore。 - user3111525
抱歉,我忽略了您在使用Lucene而不是Solr的事实。我编辑了我的答案以包含它。 - mailboat

1

1
请阅读常见问题解答,不要仅仅发布链接作为答案。 - Beau Grantham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接