如何看懂nutch搜索结果中的评分详解

2025-05-29 11:38:21

首先, nutch中的评分由Lucene的评分计算公式获得,分值计算方式为查询语句q中每个项t与文档颊俄岿髭d的匹配分值之和,当然还有权重的因素。

如何看懂nutch搜索结果中的评分详解

公式中的各项对应了评分详解的内容:

lf(t in d)项频率因子——文档(d)中出现项(t)的频率

lidf(t)项在倒排文档中出现的频率:它被用来衡量项的“唯一”性.出现频率较高的term具有较低的idf,出现较少的term具有较高的idf

lboost(t.field in d)域和文档的加权,在索引期间设置.你可以用该方法对某个域或文档进行静态单独加权

llengthNorm(t.field in d)域的归一化(Normalization)值,表示域中包含的项数量.该值在索引期间计算,并保存在索引norm中.对于该因子,更短的域(或更少的语汇单元)能获得更大的加权

lcoord(q,d)协调因子(Coordination factor),基于文档中包含查询的项个数.该因子会对包含更多搜索项的文档进行类似AND的加权

lqueryNorm(q)每个査询的归一化值,指毎个查询项权重的平方和

下面对“用心”检索结果的第一条信息的评分进行解释。

scorefor query:用心

0.02927261 = (MATCH) sum of:

o0.021942485 = (MATCH) weight(anchor:用心^2.0 in 373), product of:

§0.35618502 = queryWeight(anchor:用心^2.0), product of:

§2.0 = boost

§6.3082676 = idf(docFreq=1)

§0.028231604 = queryNorm

§0.061604176 = (MATCH) fieldWeight(anchor:用心in 373), product of:

§2.0 = tf(termFreq(anchor:用心)=4)

§6.3082676 = idf(docFreq=1)

§0.0048828125 = fieldNorm(field=anchor, doc=373)

o7.4737903E-4 = (MATCH) weight(content:用心in 373), product of:

§0.142725 = queryWeight(content:用心), product of:

§5.055505 = idf(docFreq=6)

§0.028231604 = queryNorm

§0.0052364967 = (MATCH) fieldWeight(content:用心in 373), product of:

§1.4142135 = tf(termFreq(content:用心)=2)

§5.055505 = idf(docFreq=6)

§7.324219E-4 = fieldNorm(field=content, doc=373)

o0.006582746 = (MATCH) weight(title:用心^1.5 in 373), product of:

§0.26713878 = queryWeight(title:用心^1.5), product of:

§1.5 = boost

§6.3082676 = idf(docFreq=1)

§0.028231604 = queryNorm

§0.02464167 = (MATCH) fieldWeight(title:用心in 373), product of:

§1.0 = tf(termFreq(title:用心)=1)

§6.3082676 = idf(docFreq=1)

§0.00390625 = fieldNorm(field=title, doc=373)

score forqurey中

第一行是总匹配分值——每个文档的域:anchor,title和content,最终匹配分值=查询语句在域中的得分之和。0.02927261=0.021942485+7.4737903E-4 +0.006582746 ;

第二行项在域的匹配分值——“用心”在title中的匹配分值0.006582746是怎么算出来的。t在field中的分值score = 查询权重queryWeight * 域权重fieldWeight,即0.006582746=0.26713878*0.02464167。

第三行queryWeight——queryWeight的默认情况下boost=1.0,本次检索为2.0,queryWeight = idf *queryNorm*boost,查询权重queryWeight0.35618502=6.3082676*0.028231604*2。

第四行boost 是域和文档的加权,取值为2.0

第五行idf是项在倒排文档中出现的频率—— docFreq是根据指定关键字进行检索,检索到的Document的数量,我们测试的docFreq=1;

第六行queryNorm——当默认的boost= 1.0情况下,sumOfSquaredWeights = idf * idf,idf分别来自 {用心} *{title, content}的组合。然后,就可以计算queryNorm的值了,计算如下所示:queryNorm = (float)(1.0 / Math.sqrt(sumOfSquaredWeights)

第七行fieldWeight——fieldWeight = tf * idf * fieldNorm

tf和idf的计算参考前面的,fieldNorm的计算在索引的时候确定了,此时直接从索引文件中读取,这个方法并没有给出直接的计算。如果使用DefaultSimilarity的话,它实际上就是lengthNorm,域越长的话Norm越小。这个我就不再验算了,每个域的Terms数量开方求倒数乘以该域的boost得出最终的结果。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢