在 Lucene 4.x 之前,曾经有一个基于向量空间模型的单一评分公式。
以下是影响 Lucene 评分的因素。
1) Tf : 词频,即一个词在文档中的频率。
2) Idf : 逆文档频率 : log(Collection Size / Number of documents that have term) " 这个公式可能会有所不同。
3) Field Boost:你提到的那个。它是在编制索引时提供的。
4) Coord :基于在指定文档中找到多少查询词的评分因子。
5) queryNorm(q) 是一个标准化因子,用于使查询之间的分数具有可比性。这个因素不影响文档排名(因为所有排名的文档都乘以相同的因素),而只是尝试使来自不同查询(甚至不同索引)的分数具有可比性
6) norm(t,d) 封装了一些(索引时间)提升和长度因子:
a) 文档提升 - 在将文档添加到索引之前通过调用 doc.setBoost() 进行设置。
b) 字段提升 - 通过在将字段添加到文档之前调用 field.setBoost() 来设置。
c) lengthNorm - 文档添加到索引时根据文档中该字段的标记数计算,因此较短的字段对分数的贡献更大。 LengthNorm 由在索引时生效的 Similarity 类计算。
7) 词条提升:是查询 q 中词条 t 的搜索时间提升
如需深入了解 Lucene 的默认评分公式:查看文档:Lucene Similarity
随着新版 Lucene 4.x 的发布,引入了新的评分公式,如 BM25。更多详情请查看Lucene 4.2 Similarity的子类
您可以实现相似度的子类自定义上述所有评分因素。这是Example...