多语言展示
当前在线:1166今日阅读:176今日分享:34

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

首先, nutch中的评分由Lucene的评分计算公式获得,分值计算方式为查询语句q中每个项t与文档d的匹配分值之和,当然还有权重的因素。公式中的各项对应了评分详解的内容:lf(t in d)项频率因子——文档(d)中出现项(t)的频率lidf(t)项在倒排文档中出现的频率:它被用来衡量项的“唯一”性.出现频率较高的term具有较低的idf,出现较少的term具有较高的idflboost(t.field in d)域和文档的加权,在索引期间设置.你可以用该方法对某个域或文档进行静态单独加权llengthNorm(t.field in d)域的归一化(Normalization)值,表示域中包含的项数量.该值在索引期间计算,并保存在索引norm中.对于该因子,更短的域(或更少的语汇单元)能获得更大的加权lcoord(q,d)协调因子(Coordination factor),基于文档中包含查询的项个数.该因子会对包含更多搜索项的文档进行类似AND的加权lqueryNorm(q)每个査询的归一化值,指毎个查询项权重的平方和下面对“用心”检索结果的第一条信息的评分进行解释。scorefor query:用心0. = (MATCH) sum of:o0. = (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. = queryNorm§0. = (MATCH) fieldWeight(anchor:用心in 373), product of:§2.0 = tf(termFreq(anchor:用心)=4)§6.3082676 = idf(docFreq=1)§0. = 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. = queryNorm§0. = (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. = (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. = queryNorm§0. = (MATCH) fieldWeight(title:用心in 373), product of:§1.0 = tf(termFreq(title:用心)=1)§6.3082676 = idf(docFreq=1)§0. = fieldNorm(field=title, doc=373)score forqurey中第一行是总匹配分值——每个文档的域:anchor,title和content,最终匹配分值=查询语句在域中的得分之和。0.=0.+7.4737903E-4 +0. ;第二行项在域的匹配分值——“用心”在title中的匹配分值0.是怎么算出来的。t在field中的分值score = 查询权重queryWeight * 域权重fieldWeight,即0.=0.26713878*0.。第三行queryWeight——queryWeight的默认情况下boost=1.0,本次检索为2.0,queryWeight = idf *queryNorm*boost,查询权重queryWeight0.35618502=6.3082676*0.*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 * fieldNormtf和idf的计算参考前面的,fieldNorm的计算在索引的时候确定了,此时直接从索引文件中读取,这个方法并没有给出直接的计算。如果使用DefaultSimilarity的话,它实际上就是lengthNorm,域越长的话Norm越小。这个我就不再验算了,每个域的Terms数量开方求倒数乘以该域的boost得出最终的结果。
推荐信息