Hibernate Search 是一个库,它通过自动索引实体,将 Hibernate ORM 与 Apache Lucene 或 Elasticsearch 集成,从而实现高级搜索功能:全文、地理空间、聚合等。更多信息请参阅 hibernate.org 上的 Hibernate Search。

我很高兴宣布 Hibernate Search 的最新最终版:Hibernate Search 5.5 最终版。我们主要合并了最新候选版本中的功能,并修复了一些错误。

关于版本的一些提示

Hibernate Search 现在至少需要 Hibernate ORM 5.0.0.Final,并且在撰写本文时,只有 Infinispan 8.0.1.Final 支持 Apache Lucene 5.3 索引的实时复制。

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-search-orm</artifactId>
   <version>5.5.0.Final</version>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>5.0.1.Final</version>
</dependency>
<dependency>
   <groupId>org.infinispan</groupId>
   <artifactId>infinispan-directory-provider</artifactId>
   <version>8.0.1.Final</version>
</dependency>
<dependency>
   <groupId>org.apache.lucene</groupId>
   <artifactId>lucene-core</artifactId>
   <version>5.3.0</version>
</dependency>

WildFly 10, Lucene 5

上周,我们发布了 Hibernate Search 5.4 最终版,以使其与 Hibernate ORM 5 兼容。这个版本使用 Lucene 5.3;如果您还没有升级,我们建议首先使用版本 5.4.0.Final

Hibernate Search 5.5 将包含在 WildFly 10 中。

自动索引 java.time 类型

Hibernate Search 现在能够自动为 java.time.Yearjava.time.Durationjava.time.Instantjava.time.LocalDatejava.time.LocalTimejava.time.LocalDateTimejava.time.LocalTimejava.time.MonthDayjava.time.OffsetDateTimejava.time.OffsetTimejava.time.Periodjava.time.YearMonthjava.time.ZoneDateTimejava.time.ZoneIdjava.time.ZoneOffset 提供合理的映射。

这意味着它为这些类型中的每一个都包含了一个内置的 FieldBridge,并允许对这些类型的属性进行透明索引和查询。当然,您可以像往常一样通过提供自己的 FieldBridge 来自定义索引。

此功能仅在运行在Java 8运行时可用,尽管Hibernate Search的所有其他功能仍然与Java 7向后兼容。

排序改进

自Apache Lucene 5.0(以及包括5.3,因为这是我们目前要求的版本)以来,如果我们提前知道您打算用于排序的字段,我们可以提供显著的性能提升。

为此,我们提供了一个新的注解org.hibernate.search.annotations.SortableField。如果您开始在项目中使用此注解,您将受益于性能改进,但对于那些不想更新映射的用户,我们将回退到旧的策略。

此主题在本后续文章中有详细讨论。

在索引中对null标记进行编码

当使用@Field(indexNullAs=)在索引中编码某些标记值时,现在要求标记的类型必须与该字段中索引的其他所有值的字段类型兼容。

这对`NumericField`(针对数字的范围查询进行优化的字段)来说是个问题,因为我们之前允许您使用类似“null”的字符串关键字进行编码:这不再被允许,您必须选择一个用于表示null值的数字。

例如,对于“年龄”属性,您可能想使用以下内容

@Field(indexNullAs = "-1")
Integer nullableAge;

如何获取此版本

您所需的一切都可以在Hibernate Search网站上找到。从SourceForge下载完整发行版,或从Maven Central获取,并在我们的论坛邮件列表中联系我们。


回到顶部