我正在考虑使用StandardAnalyzer的默认评分函数。
似乎价值有时高于1.0。
答案 0 :(得分:8)
实际上没有最高分。
当Lucene得分时,它基本上将一组分数相加,得出总分。
例如:
假设我搜索
A OR B
。此查询分为其组成部分 -A
和B
。使用子记分器独立搜索该查询的每个部分,并给出查询的相关部分的分数。如果文档包含A
和B
,则得分将是两个子得分者的得分组合。
因为可以有很多次级得分手,所以总分可以大于1。
特定匹配的得分是绝对的,这意味着它只能用作与同一搜索的最高得分的比较。不同搜索的得分不能直接比较。
如果您确实需要0到1之间的值,则可以根据其值与搜索中的最高分数之比来对每个分数进行标准化。这将为您提供相当于百分比的分数。但是,这些百分比仍无法在搜索范围内进行比较。
答案 1 :(得分:5)
得分的最大值取决于正在执行的查询。要查找给定查询的最高得分,您可以通过 fl 参数请求得分字段,需要明确请求。
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&amp;文档#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(文字:210中的“mmdci bldleg 02”),产品: 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)&amp;的 doMaxScore(真)强>
答案 2 :(得分:1)
这是一个描述如何在Lucene中计算分数的页面: