5.9. Hibernate 搜索更改


JBoss EAP 7 附带的 Hibernate Search 版本已更改。之前的 JBoss EAP 版本随 Hibernate Search 4.6.x 一同发布。JBoss EAP 7 附带 Hibernate Search 5.5.x。

Hibernate Search 5.5 基于 Apache Lucene 5.3.1 构建。如果您使用任何原生 Lucene API,请确保与此版本一致。Hibernate Search 5.5 API 换行并隐藏了版本 3 和版本 5 之间进行的许多 Lucene API 更改的复杂性,但一些类现已弃用、重命名或重新打包。本节介绍了这些更改如何影响应用程序代码。

Hibernate 搜索映射更改

为嵌入式关系的 ID 字段索引

当使用 @IndexedE mbedededed 注解包含相关实体中的字段时,不再包含相关实体的 id。您可以使用 @IndexedEmbeded 注解的 includeEmbeded ObjectId 属性启用包括 id

示例 :@IndexedEmbeded 注解

@IndexedEmbedded(includeEmbeddedObjectId=true)
Copy to Clipboard Toggle word wrap

数量和日期索引格式更改

现在,默认情况下,数字和日期被索引为数字字段。intlongfloatdouble 及其对应打包程序类的属性不再被索引为字符串。现在,它们会根据 Lucene 的适当数字编码进行索引。id 字段是此规则的一个例外。即使它们由数字类型表示,也会默认将它们索引为 string 关键字。使用 @NumericField 现已过时,除非您想为数字编码指定自定义精度。您可以通过显式指定字符串 encoding 字段桥接来保留旧的基于字符串的索引格式。如果是整数,这是 org.hibernate.search.bridge.builtin.IntegerBridge。检查 org.hibernate.search.bridge.builtin 软件包,用于其他公开可用的字段网桥。

DateCalendar 不再被索引为字符串。相反,实例会用长值编码,代表自 1970 年 1 月 1 日 00:00:00 GMT 后的毫秒数。您可以使用新的 EncodingType enum 切换索引格式。例如:

示例:@DateBridge@CalendarBridge 注释

@DateBridge(encoding=EncodingType.STRING)
@CalendarBridge(encoding=EncodingType.STRING)
Copy to Clipboard Toggle word wrap

数字和日期的编码更改非常重要,对应用程序的行为有重大影响。如果您有一个以字符串编码的字段为目标的查询,但现在采用数字编码,则必须更新查询。必须使用 NumericRangeQuery 搜索数字字段。您还必须确保通过面对面目标的所有字段都是字符串编码。如果您使用 Search 查询 DSL,则会自动为您创建正确的查询。

其它 Hibernate 搜索更改

  • 对选项进行排序已被改进,字段编码在排序选项中现在会导致运行时异常。如果排序中使用的字段已知,Lucene 还提供更多执行性排序。Hibernate Search 5.5 提供新的 @SortableField 注释,及其多值 companion @SortableFields。如需更多信息,请参阅从 Hibernate Search 5.4 迁移到 5.5
  • Lucene SortField API 需要以下应用程序代码更改:

    在之前的 JBoss EAP 版本中,您可以设置查询中的 sort 字段类型,如下所示:

    fulltextQuery.setSort(new Sort(new SortField("title", SortField.STRING)));
    Copy to Clipboard Toggle word wrap

    以下是如何在 JBoss EAP 7 中设置它的示例:

    fulltextQuery.setSort(new Sort(new SortField("title", SortField.Type.STRING)));
    Copy to Clipboard Toggle word wrap
  • 由于 SearchFactory 只能供 ORM 集成使用,因此它从 hibernate-search-engine 模块移动到 hibernate-search-orm 模块。其他集成商应完全依赖 SearchIntegrator,它取代了过时的 SearchFactoryIntegrator
  • enum 值 SpatialMode.GRID 被重命名为 SpatialMode.HASH
  • FullTextIndexEventListener 现在是一个最终类。如果您目前扩展了这个课程,您必须找到一个替代的解决方案才能获得相同的功能。
  • hibernate-search-analyzers 模块已被删除。推荐的方法是直接使用适当的 Lucene 工件,如 org.apache.lucene:lucene-analyzers-common
  • Jakarta Messaging 控制器 API 已更改。对 Hibernate ORM 的 Jakarta 消息传递后端依赖性已经被删除,因此可以在其他非ORM 环境中使用它。其结果是,org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController 的实现器必须根据新的签名进行调整。此类是一个内部类,建议将它用作示例,而不是扩展它。
  • org.hibernate.search.spi.ServiceProvider SPI 被重构。如果您与旧服务合同集成,请参阅 Hibernate Search 5.5 Javadoc Service、 Service 、startableStoppable 了解新合同的详细信息。
  • 如果您保留了 Lucene 3.x 生成的索引,且已使用 Hibernate Search 5.0 或更高版本进行重建,您将得到 IndexFormatTooOldException。建议您使用大量索引器重建索引。如果您无法做到这一点,请尝试使用 Lucene 的 IndexUpgrader。在更改默认行为时,您必须仔细更新 Hibernate Search 映射。如需更多信息,请参阅 Apache Lucene Migration Guide
  • 在 JBoss EAP 7 中,Apache Lucene 从 3.6 升级到 5.3。如果您的代码直接导入 Lucene 代码,请参阅 Apache Lucene Migration Guide 了解详情。还可在 Lucene Change Log 中找到其他信息。
  • 使用 @Field(indexNullAs=) 在索引中编码 null 标记值时,标记的类型必须与同字段中索引的所有其他值兼容。例如,之前可以对类型为数字的字段中的 null 值使用字符串"null"。这不再被允许。现在,您需要选择一个代表 null 的值,例如 -1
  • 对面对引擎进行了显著改进。大多数更改不会影响 API。一个值得注意的例外是,您必须注解任何您要用于与 @Facet@Facets 注解相关的字段。

Hibernate 搜索重命名和重新打包类

以下是已重新打包或重命名的 Hibernate 搜索类列表:

Expand
以前的软件包和类新的软件包和类

org.hibernate.search.Environment

org.hibernate.search.cfg.Environment

org.hibernate.search.FullTextFilter

org.hibernate.search.filter.FullTextFilter

org.hibernate.search.ProjectionConstants

org.hibernate.search.engine.ProjectionConstants

org.hibernate.search.SearchException

org.hibernate.search.exception.SearchException

org.hibernate.search.Version

org.hibernate.search.engine.Version

Lucene: Renamed 和 repackaged 类

查询解析器已移至新模块,结果是软件包从 org.apache.lucene.queryParser.QueryParser 变为 org.apache.lucene.queryparser.classic.QueryParser

许多 Lucene 分析器都已重构,结果是软件包的变化。请参阅 Apache Lucene 文档 来查找替换软件包。

一些 Apache Solr 实用程序类(如 TokenizerFactoryTokenFilterFactory )被移到 Apache Lucene 中。如果您的应用程序使用这些实用程序或自定义分析器,则必须在 Apache Lucene 中找到新的软件包名称。

如需更多信息,请参阅 Apache Lucene 迁移指南

Hibernate 搜索已弃用的 API

有关 Hibernate 搜索已弃用接口、类、枚举、注解类型、方法、构造器和枚举 API 文档的完整列表,请参阅 Hibernate Search Decated API 文档。

Hibernate 搜索已弃用的接口
Expand
Interface描述

org.hibernate.search.store.IndexShardingStrategy

从 Hibernate Search 4.4 开始已弃用。可能会在搜索 5 中删除。改为使用 ShardIdentifierProvider

org.hibernate.search.store.Workspace

此接口将移动,并且应该被视为非公共 API。如需更多信息,请参阅 HSEARCH-1915

Hibernate 搜索已弃用的类
Expand
描述

org.hibernate.search.filter.FilterKey

自定义过滤器键已弃用,并计划在 Hibernate Search 6 中删除。从 Hibernate Search 5.1 开始,根据给定的过滤器参数自动计算缓存 Lucene 过滤器的密钥。

org.hibernate.search.filter.StandardFilterKey

自定义过滤器键已弃用,并计划在 Hibernate Search 6 中删除。从 Hibernate Search 5.1 开始,根据给定的过滤器参数自动计算缓存 Lucene 过滤器的密钥。

Hibernate 搜索已弃用的 enums
Expand
Enum描述

org.hibernate.search.annotations.FieldCacheType

删除 CacheFromIndex 注解,因为它已弃用。请参阅 Hibernate 搜索已弃用的注释

Hibernate 搜索已弃用的注解
Expand
注解描述

org.hibernate.search.annotations.CacheFromIndex

移除注解。不需要替代方案。

org.hibernate.search.annotations.Key

自定义过滤器缓存键是已弃用的功能,在 Hibernate Search 6 中删除。从 Hibernate Search 5.1 开始,根据过滤器参数自动决定过滤缓存密钥,因此不再需要提供密钥对象。

Hibernate 搜索已弃用的方法
Expand
方法描述

org.hibernate.search.FullTextSharedSessionBuilder.autoClose()

没有替换

org.hibernate.search.FullTextSharedSessionBuilder.autoClose(boolean)

没有替换

org.hibernate.search.cfg.IndexedMapping.cacheFromIndex(FieldCacheType…​)

这将在没有替换的情况下删除。

org.hibernate.search.cfg.EntityDescriptor.getCacheInMemory()

这将在没有替换的情况下删除。

org.hibernate.search.cfg.ContainedInMapping.numericField()

改为调用 field().numericField()

org.hibernate.search.cfg.EntityDescriptor.setCacheInMemory(Map<String, Object>)

这将在没有替换的情况下删除。

org.hibernate.search.MassIndexer.threadsForSubsequentFetching(int)

此方法将被删除。

org.hibernate.search.query.dsl.FuzzyContext.withThreshold(float)

使用 FuzzyContext.withEditDistanceUpTo(int)

Hibernate 搜索已弃用的构造器
Expand
Constructor描述

org.hibernate.search.cfg.NumericFieldMapping(PropertyDescriptor, EntityDescriptor, SearchMapping)

使用 NumericFieldMapping.NumericFieldMapping(String, PropertyDescriptor, EntityDescriptor, SearchMapping)

影响高级集成商的变化

本节介绍不是公共 API 的一部分的更改。它们不应该影响平均开发人员,因为工件只能被扩展 Hibernate Search 框架的集成访问。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部