luence排序评分算法

这个主要对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

 

 

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

 

tf(t in d)   =  

frequency½

 

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

idf(t)  =  

1 + log (

numDocs

–––––––––

docFreq+1

)

 

  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

 

 

 

  1. lengthNorm(field) 文档在建立索引的时候加入的一个参数,根据文档的某个字段含有的Term数量来计算的。Term数量比较少的字段将得到更多的得分。这个函数是由Similarity类在建立索引的时候计算的。(1/numTerms*numTerms
  2. coord(q,d) 这个函数表示的是在这个文档(d)中Termt)出现的百分比,也就是文档中出现的不同Term数量和查询条件(q)中的不同Termt)的数量之比。所以,文档中出现的Term种类越多,分值就高。
  3. 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

 

 

 

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值