我正在考虑使用StandardAnalyzer作为默认评分函数。
看起来有时候得到的值会超过1.0。
没有真正的最高分。
当Lucene进行评分时,它基本上将一组得分相加以给出总得分。
例如:
假设我搜索
A OR B
。该查询被拆分为其组成部分 -A
和B
。使用子评分器独立地搜索每个查询的部分,并为相关查询的部分给出得分。如果一个文档包含A
和B
,则分数将是来自两个子评分器的得分的组合。
由于可以有许多子评分器,因此总分可以大于1。
特定命中的分数是绝对的,这意味着它仅可用于与同一搜索的最高分进行比较。不同搜索之间的分数不能直接比较。
如果确实需要介于0和1之间的值,则可以根据其值与搜索的最高分的比率来标准化每个分数。这将为您提供等效的百分比分数。但这些百分比无法在不同的搜索之间进行比较。
分数的最大值取决于所执行的查询。要找出给定查询的最大分数,可以通过fl参数请求score字段,需要明确请求。
Ex Req: http://server:7983/solr/select/?q=term&fl=*,score
Ex: <result name="response" numFound="29" start="0" maxScore="2.1740298">
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)。