luence排序评分算法

    技术2022-05-11  86

    这个主要对lucene的评分公式里面的各个参数做一个详细的解释。其他的可参照

    1.  http://book.csdn.net/bookfiles/28/10028814.shtml

    2.  http://blog.csdn.net/wawaboss/archive/2006/12/31/1471565.aspx

    score(q,d)= coord(q,d)* queryNorm(q)*

    ( tf(t in d)  ·  idf(t)2  ·  t.getBoost() ·  norm(t,d) )

    t in q

     

     

    tf(t in d) 表示的是查询条件中,每个(t:term)在本文档(d)中的出现频率。查询关键词出现的频率越高,文档的得分就越高。这个部分的默认计算公式是: 

     

    tf(t in d)   =  

    frequency½

     

    idf(t) 表示的是反转文档频率( Inverse Document Frequency).这个函数表示的是(t:term)在所有文档中一共在多少个文档中出现过。因为文档出现的次数越少就越容易定位,所以文档数越少,得分就越高。这个函数的默认计算公式如下:

    idf(t)  =  

    1 + log (

    numDocs

    –––––––––

    docFreq+1

    )

     

    boost(t.field in d)表示文档得分,它包括

    Document boost – 文档的boost,是建索引的时候设置的文档得分。

    Field boost – 在将一个字段加入到文档中去的时候加入的字段得分。(不同的字段得分不同有利于排序,例如标题的得分应该比内容的得分要高等)

    boost(t.field in d)=doc.getboost* 

    f.getBoost()

    field f in d named as t

     

     

     

    lengthNorm(field) 文档在建立索引的时候加入的一个参数,根据文档的某个字段含有的Term数量来计算的。Term数量比较少的字段将得到更多的得分。这个函数是由Similarity类在建立索引的时候计算的。(1/numTerms*numTermscoord(q,d) 这个函数表示的是在这个文档(d)中Termt)出现的百分比,也就是文档中出现的不同Term数量和查询条件(q)中的不同Termt)的数量之比。所以,文档中出现的Term种类越多,分值就高。queryNorm(q) 这个函数是一个调节因子,不影响具体的排序情况。主要是用来让排序结果在不同的查询条件(或者不同的索引)之间可以比较。这个条件是在搜索的时候计算的。它的计算公式如下:

    queryNorm(q)   =   queryNorm(sumOfSquaredWeights)   =  

    1

    ––––––––––––––

    sumOfSquaredWeights½

     

    The sum of squared weights (查询条件的terms)是由查询的权重对象计算的。不同的查询方式,有不同的计算方法。例如:Boolean query的计算公式如下:

    sumOfSquaredWeights   =   q.getBoost() 2  · 

    ( idf(t)  ·  t.getBoost() ) 2

     

    t in q

     

     

     

     

     

     

    最新回复(0)