【Lucene】lucene的评分机制

 

测试环境里查询条件1065800714,为什么ScoreDoc.score小于1呢?这个值是怎么算出来的?

输入1065800714*,ScoreDoc.score变成了1

注:在生产环境里大于1而在测试环境里却小于1,生产和测试环境唯一区别是测试环境数据量很小。

ScoreDoc.score——The score of this document for the query.

 

判断文档之间的关系(即文档相关性)

注:查询语句也可以看成是文档,即查询语句与匹配结果文档之间的关系

 

要判断文档之间的关系,首先得找出哪些词(Term)对文档之间的关系最重要,然后判断这些词之间的关系

从而得到文档相关性。

 

step 1.计算词(Term)的权重(Term Weight)

一个词在某文档中的重要性(即权重)越大,则在计算文档之间相关性中作用更大,影响权重主要有两个要素:

a.  Term Frequency(tf):此term在此document里出现的次数。出现次数越多,tf越大,说明该词越重要。

 

b. Document Frequency(df):多少document包含该term。数目越少,df越小(idf越大),说明该词越重要。

 

step 2.向量空间模型算法(Vector Space Model)计算文档之间的相关性。

 

 

fieldWeight是什么?

 

 

IndexSearcher中与打分有关的方法

 

 

我的需求:只关心查询的term是否存在,对于hit result的score,term的文档频率(df)不影响score。

即计算一个term的权重,根据该term占一个document的tf来计算,忽略上面step 1的b因素。

 

参考:

http://lucene.apache.org/core/old_versioned_docs/versions/3_4_0/scoring.html

http://lucene.apache.org/core/old_versioned_docs/versions/3_4_0/api/core/org/apache/lucene/search/package-summary.html#changingSimilarity

http://www.gossamer-threads.com/lists/lucene/java-user/39125#39125

http://www.gossamer-threads.com/lists/lucene/java-user/38967#38967

你可能感兴趣的:(Lucene)