lucene为每个与Query匹配的文档都赋予了一个分数,用这个分数来表示文档与Query的相似度。lucene采用的公式和老师所说的最常用公式有点相似:
Σt in q (t f (t in d ) *idf (t)* boost(t.field in d )* lengthNorm(t.field in d )) *coord(q,d )* queryNorm(q)
其中,t表示term、d表示document、q表示query。这个公式的一些含义如下:
1. tf(t in d):表示t的词频,即特征词t在文档d中出现的次数
2. idf(t): 反文献频率,这个应该大家都比较熟了。
3. boost(t.field in d):这个在建立lucene索引的时候说过。对某个field的赋予的权重。
4. lengthNorm(t.field in d):表示关键词t在文档d中所占的比重。在这里d中的关键词越少,代表t越重要。
5. coord(q,d): 代表q中有多少个特征词在文档d中出现
6. queryNorm(q): 代表q中每个特征词权值之和。
有些时候理解这些参数,以及为什么lucene要设置这样的评分机制,会有点困难,lucene比较人性化,提供了explain()方法使得用户可以更好的理解评分机制。
附件为explain()的使用方法。