4

这个问题有点令人困惑。我是 Lucene 的新手,正在浏览文档。我发现adding boost to a field, 增加了该领域的规范,因此在搜索时增加了该术语的分数。

IE 在索引时向字段添加提升会影响搜索时的分数。我的问题是,除了提升之外,还有其他方法可以做到这一点吗?请指教。

4

1 回答 1

5

在 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的子类

您可以实现 Similarity 的子类来自定义上述所有评分因素。这是一个例子......

于 2013-04-03T15:01:28.010 回答