在这里,我们将帮助您将现有的 Hibernate Search 应用程序迁移到最新版本。
升级到 Hibernate Search 5.0.0.Final
本指南旨在帮助您将基于较新版本 Hibernate Search 4(例如 *4.4.x* 和 *4.5.x*)的现有应用程序迁移到 Hibernate Search 5。
| 如果您要从旧版本升级,请先迁移到 *4.5.3.Final*。 |
| 本文档提供了迁移的指针。它指的是 Hibernate Search 5.0.0.Final。如果您认为缺少某些内容或某些内容不起作用,请 联系我们。如果您要迁移不同的版本,请参阅 Hibernate Search 迁移指南。 |
要求
最重要的是,Hibernate Search 5 现在需要 Java 7。对 Java 6 的支持已取消。
Hibernate Search 5 现在还构建在 Lucene 4 之上(更准确地说,是 4.10.2)。如果您使用任何本机 Lucene API,请确保与该版本保持一致。另请参阅 Lucene 迁移指南。
Hibernate Search 与 Hibernate ORM 4.3.7.Final 和 Infinispan 7.0.2.Final 兼容。
类重命名和重新定位
在 Hibernate Search 4 和 5 之间,几个类已更改名称或包。这发生在 Search API 内部以及 Lucene API 内部。以下是最重要的更改列表。
在 Hibernate Search 中
-
SearchFactory已从模块hibernate-search-engine迁移到hibernate-search-orm,因为它应该只被 ORM 集成使用。其他集成应该只依赖于SearchIntegrator(之前的SearchFactoryIntegrator) -
以下类已迁移
-
org.hibernate.search.engine.impl.SearchMappingBuilder⇒
org.hibernate.search.engine.spi.SearchMappingBuilder -
org.hibernate.search.Environment⇒
org.hibernate.search.cfg.Environment -
org.hibernate.search.FullTextFilter⇒
org.hibernate.search.filter.FullTextFilter -
org.hibernate.search.indexes.impl.DirectoryBasedIndexManager⇒
org.hibernate.search.indexes.spi.DirectoryBasedIndexManager -
org.hibernate.search.infinispan.impl.InfinispanDirectoryProvider⇒
org.hibernate.search.infinispan.spi.InfinispanDirectoryProvider -
org.hibernate.search.ProjectionConstants⇒
org.hibernate.search.engine.ProjectionConstants -
org.hibernate.search.SearchException⇒
org.hibernate.search.exception.SearchException -
org.hibernate.search.spi.MassIndexerFactory⇒
org.hibernate.search.batchindexing.spi.MassIndexerFactory -
org.hibernate.search.spi.SearchFactoryBuilder⇒
org.hibernate.search.spi.SearchIntegratorBuilder -
org.hibernate.search.spi.SearchFactoryIntegrator⇒
org.hibernate.search.spi.SearchIntegrator -
org.hibernate.search.Version⇒
org.hibernate.search.engine.Version
-
-
枚举值
SpatialMode.GRID已重命名为SpatialMode.HASH
在 Apache Lucene 中
-
Lucene 的
QueryParser包已从org.apache.lucene.queryParser.QueryParser更改为org.apache.lucene.queryparser.classic.QueryParser -
许多流行的
Analyzer、TokenFilter和CharFilter类已移动。请参阅 Lucene API 文档 以查找相应的替换项。 -
Solr 实用程序类(例如
TokenizerFactory或TokenFilterFactory)已移至 Apache Lucene。因此,我们可以删除对 Apache Solr 的依赖关系。好消息是依赖关系图简化了!坏消息是,如果您依赖于这些实用程序或自定义分析器,您需要找到新的(包)名称。
映射
嵌入式关系的 ID 字段默认不再被索引
当使用 @IndexedEmbedded 注释包含来自相关实体的字段时,我们会包含相关实体的“id”。这些“id”字段默认不再包含,但您可以使用 @IndexedEmbedded 注释的 includeEmbeddedObjectId 属性启用包含。
@IndexedEmbedded(includeEmbeddedObjectId=true)
数字和日期索引格式
数字和日期现在默认索引为数字字段。
类型为 Date、Calendar 以及 int、long、float、double 及其相应包装类的属性不再索引为字符串。相反,它们现在使用 Lucene 的适当数字编码进行索引。
“id”字段是此规则的例外:即使这些字段由数字类型表示,它们默认仍将索引为字符串关键字。
Date 和 Calendar 实例被编码为 long 值,表示自 *1970 年 1 月 1 日 00:00:00 GMT* 以来的毫秒数。 |
@NumericField 的使用现在已过时,除非您要为数字编码指定自定义精度。 |
您仍然可以通过显式指定字符串编码字段桥来保留旧的(基于字符串)索引格式。例如,对于整数,org.hibernate.search.bridge.builtin.IntegerBridge。检查包 org.hibernate.search.bridge.builtin 以获取其他公开可用的字段桥。
对于日期和日历,您可以通过新的 EncodingType 枚举来切换索引格式,例如 @DateBridge(encoding=EncodingType.STRING) 以及 @CalendarBridge(encoding=EncodingType.STRING)。
数字和日期编码的更改可能是最重要的用户界面变化。如果您有任何针对以前字符串编码的字段但未按数字编码的查询,您需要更新查询。数字字段必须使用 NumericRangeQuery 搜索(如果您使用的是 Search 查询 DSL,则应为您创建正确的查询)。此外,请确保所有由分面目标定位的字段目前都需要进行字符串编码。 |
其他
FullTextIndexEventListener 现在为 final
FullTextIndexEventListener 现在是一个 final 类。如果您要扩展此类,则需要找到其他方法来实现您的目标。也许您可以使用 EntityIndexingInterceptor?如果您无法找到实现用例的方法 - 联系我们。
hibernate-search-analyzers 模块已删除
模块 hibernate-search-analyzers 已从存储库中删除,并将不再包含在即将发布的版本中。它已过时,我们建议直接依赖于相应的 Lucene 工件,例如 org.apache.lucene:lucene-analyzers-common。
JMS 控制器 API 已更改
JMS 后端依赖于 Hibernate ORM。此依赖关系已删除,因此后端也可以在其他(非 ORM)环境中使用。结果是,org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController 的实现者需要调整新的签名。此类实际上被认为是内部类。我们建议将此类作为示例,而不是扩展它。
ServiceRegistry API 已更新
org.hibernate.search.engine.service.spi.Service SPI 已重构。如果您要与旧的服务契约集成,请参阅 ServiceManager、Service、Startable 和 Stoppable 的 javadoc,了解有关新契约的详细信息。