7.8.5. 自定义 Lucene 的 Scoring Formula


Lucene 允许用户通过扩展 org.apache.lucene.search.Similarity 来自定义其评分公式。此类中定义的抽象方法与计算文档 d 查询 q 分数的以下公式因素相符:

扩展 org.apache.lucene.search.Similarity,以自定义 Lucene 的评分公式。抽象方法与 用于计算 文档 d 查询分数的公式匹配,如下所示:

*score(q,d) = coord(q,d) · queryNorm(q) · ∑ ~t in q~ ( tf(t in d) ·
idf(t) ^2^ · t.getBoost() · norm(t,d) )*
Expand
factor描述

tf(t ind)

文档(d)中术语(t)的术语频率因素。

idf(t)

术语的反向文档频率。

coord(q,d)

根据在指定文档中找到多少查询术语的分数因素。

queryNorm(q)

用于在查询之间对分数进行可比较的规范化因素。

t.getBoost()

字段推动.

norm(t,d)

封装几个(索引时间)增高和长度因素。

本手册无法更加详细地解释此公式。如需更多信息,请参阅 Similarity 的 Java 文档。

Hibernate Search 提供三种方法来修改 Lucene 的相似性计算:

首先,您可以使用属性 hibernate.search.similarity 指定一个完全指定的类名称来设置默认的相似性。默认值为 org.apache.lucene.search.DefaultSimilarity。

您还可以通过设置相似性属性来覆盖用于特定索引 的相似性

hibernate.search.default.similarity = my.custom.Similarity

最后,您可以使用 @Similarity 注释覆盖类级别上的默认相似性。

@Entity
@Indexed
@Similarity(impl = DummySimilarity.class)
public class Book {
...
}

例如,让我们假设术语在文档中出现的频率并不重要。出现过多个术语的文档的评分应与多次出现的文档相同。在这种情况下,您的自定义方法 tf(float freq)应该返回 1.0。

警告

当两个实体共享相同的索引时,它们必须声明相同的相似实施。同一类层次结构中的类始终共享索引,因此不允许覆盖子类型中的相似性实施。

同样,通过索引设置和类级设置定义相似性(因为它们会发生冲突)也不有意义。此类配置将被拒绝。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部