文档的得分是在用户进行检索时实时计算出来的。如果在建立索引时就已经将每个文档的得分计算好,那么当用户输入任何关键字时,得分最高的文档都会被排在返回结果的最前面,这显然是不合理的。
因此,所有文档的得分应当都与用户输入的关键字有关系,而且是实时运算的结果。其实,所谓得分,可以简单理解成是某个关键字在某文档中出现的频率。
图11-6所示的公式就是Lucene用于计算某个关键字在对应于某文档的得分。
表11-1 Lucene得分公式的解释在Lucene得分公式中,已经包含了影响文档评分的各种因素。在表11.1中详细介绍了每一种因素对搜索结果评分的影响作用。因 素
在公式中的作用描述
tf(t in d)
词条t在文档d中出现的词频,出现次数越多文档得分越高 ↑
idf( t )
词条t在所有文档中的倒排词频,出现文档数越多,t越不重要,得分越低↓
boost(t.field in d)
在索引过程中设置的字段参数,field的权重↑
lengthNorm(t.field in d)
字段的标准化值,表明在字段中存储了多少词条,这个数值是在索引过程中计算出来的,并且也存储在索引中↓
coord(q, d)
协调因子,它的计算是基于文档d中所包含的所有可供查询的词条数量↑
queryNorm(q)
在给出每个查询条目的方差和后,计算某查询的标准化值↑
总结一下,影响d得分的因素包括:1. d中t出现的次数,tf(t in d),出现次数越多d得分越高 ↑
2. 多少个d中t出现的频率,idf(t),出现的越多得分越低↓
3. Field的权重↑
4. d的权重↑
5. d的长度或者说相应的Field的长度coord(q, d)↓
6. d中出现了多少个q中的Term↑