测试环境里查询条件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