Lucene 中相关度排序

Lucene 中的相似度排序主要是在org.apache.lucene.search 包下的 Similarity类中定义的,其排序算法如下: 
<o:p> </o:p>

score(q,d) =

Σ ( tf(t in d) * idf(t)^2 * getBoost(t in q) * getBoost(t.field in d) * lengthNorm(t.field in d) )      * coord(q,d) * queryNorm(sumOfSqaredWeights)

t in q

<o:p> </o:p>

sumOfSqaredWeights =

       Σ    ( idf(t) * getBoost(t in q) )^2

t in q

<o:p> </o:p>

Similarity是一个抽象类,默认的相似度排序算法是在DefaultSimilarity类中实现,<o:p></o:p>

tf Math.sqrt(freq),其中freq为标引项在d 中的频度

idf (Math.log(numDocs/(double)(docFreq+1)) + 1.0)

lengthNorm 为长度标准化因子

              (1.0 / Math.sqrt(numTerms))    其中numTerms为标引项

coord(q,d) 查询词q在在文档d中命中的个数越多,则该因子也就越大

                public float coord(int overlap, int maxOverlap) {<o:p></o:p>

               return overlap / (float)maxOverlap;<o:p></o:p>

        }<o:p></o:p>

           其中overlap为命中的个数,maxOverlap为查询词的个数<o:p></o:p>

queryNorm 这一项不影响排序

 

你可能感兴趣的:(apache,算法,Lucene)