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

我们刚刚发布了Hibernate Search 6.1.0.Beta1,这是Hibernate Search下一个次版本的一个beta版本。

主要变更包括:异步、分布式自动索引现在可以动态扩展到更多或更少的节点,支持多租户,并在大规模索引期间暂停;新的Jakarta EE工件与传统的Java EE工件一起提供,Elasticsearch后端接受JSON来自定义映射,等等。

Hibernate Search 6.1.0.Beta1还包括Hibernate ORM 5.6.1.Final和Lucene 8.11等其他升级。

新增功能

Hibernate Search 6.1仍在开发中:一些功能可能仍然不完整或可能以向后不兼容的方式更改。

依赖项升级

Hibernate ORM (HSEARCH-4379)

Hibernate Search 6.1现在依赖于Hibernate ORM 5.6。

Lucene (HSEARCH-4367)

Lucene后端现在使用Lucene 8.11。

其他

异步、分布式自动索引:改进

通过动态分片实现动态扩展

在Hibernate Search 6.1.0.Alpha1的公告帖子中,我们介绍了应用节点之间的协调,以实现异步、分布式自动索引。

当时,协调只支持静态分片:节点数量固定,并且您必须手动将分片分配给每个参与自动索引的节点。

截至HSEARCH-4140,静态分片仍然是可用的,但不是必须的:默认情况下,Hibernate Search将使用动态分片,这意味着它会根据当前连接到数据库的应用程序节点动态扩展或缩小,自动调整分片数量和分配。

有关更多信息,请参阅本节文档,但简要地说,从6.1.0.Beta1版本开始,您只需配置以下内容即可启用异步、分布式自动索引(您还需要将表添加到您的数据库模式中

hibernate.search.coordination.strategy = outbox-polling
自6.1.0.Alpha1以来,策略的名称已从database-polling更改为outbox-polling,并且大多数相关配置属性也进行了重命名。请参阅破坏性变更

有关如何更详细地配置协调的信息,请参阅本节文档

与多租户兼容

截至HSEARCH-4316outbox-polling协调策略现在将正确适用于依赖Hibernate ORM的多租户应用程序,前提是它们在其配置中列出了所有预期的租户ID

大规模索引期间暂停自动索引

截至HSEARCH-4358,在正在进行大规模索引时,自动索引将被暂停,并在大规模索引完成后恢复。

有关为什么这是必要的以及如何调整行为的信息,请参阅本节文档

自定义ES索引映射

HSEARCH-4253以来,您可以为Hibernate Search提供包含部分期望映射的索引的JSON文件,Hibernate Search将自动将其与生成的映射合并,以便在创建/更新索引时推送到Elasticsearch。

# To configure the defaults for all indexes:
hibernate.search.backend.schema_management.mapping_file = custom/index-mapping.json
# To configure a specific index:
hibernate.search.backend.indexes.<index name>.schema_management.mapping_file = custom/index-mapping.json

这特别适用于设置顶级映射属性,例如禁用_source字段

{
  "_source": {
    "enabled": false
  }
}

Jakarta EE

截至HSEARCH-4240,除了针对Java EE(JPA、CDI等)的传统工件之外,Hibernate Search现在还提供针对Jakarta EE 9.1的替代、实验性工件(Jakarta Persistence 3、Jakarta CDI 3)。

这些工件在其工件ID后缀为"-jakarta",类似于Hibernate ORM的等效工件(您应该一起使用)。

在Hibernate Search 6.1.0.Beta1中,这包括以下Jakarta工件

  • org.hibernate.search:hibernate-search-mapper-orm-jakarta:6.1.0.Beta1

  • org.hibernate.search:hibernate-search-mapper-orm-coordination-outbox-polling-jakarta:6.1.0.Beta1

  • org.hibernate.search:hibernate-search-mapper-orm-batch-jsr352-core-jakarta:6.1.0.Beta1

  • org.hibernate.search:hibernate-search-mapper-orm-batch-jsr352-jberet-jakarta:6.1.0.Beta1

  • org.hibernate.search:hibernate-search-v5migrationhelper-orm-jakarta:6.1.0.Beta1

请注意,为了切换到Jakarta EE,您将需要切换到这些工件,但还需要

  • 为您的其他Java EE依赖项使用Jakarta EE特定的组件,例如 Hibernate ORM

  • 将您的代码转换为Jakarta EE API。这应该相当简单:只需在代码中(包括javax.enterprisejavax.transaction等)将import javax.persistence.<something>替换为import jakarta.persistence.<something>

  • 寻找支持Jakarta EE的新版本框架或应用程序服务器。这可能很难找到,因为Jakarta EE仍然很年轻,但一些应用程序服务器已经提供了至少一个预览版。

Java模块

HSEARCH-3274以来,Hibernate Search现在在可能的情况下提供带有完整Java模块定义的multi-release JAR,其中包括所有依赖项。

这特别排除了Lucene后端,因为Lucene 8已分割包

破坏性变更

  • HSEARCH-4368:将database-polling协调策略重命名为outbox-polling。您应该将Maven依赖项从hibernate-search-mapper-orm-coordination-database-polling更新到hibernate-search-mapper-orm-coordination-outbox-polling,并将配置属性hibernate.search.coordination.strategy的值从database-polling更改为outbox-polling

  • HSEARCH-4372:一些配置属性已更改

    • hibernate.search.coordination.shards.total_count现在是hibernate.search.coordination.event_processor.shards.total_count

    • hibernate.search.coordination.shards.assigned现在是hibernate.search.coordination.event_processor.shards.assigned

    • hibernate.search.coordination.shards.static不再有用:如果设置了hibernate.search.coordination.event_processor.shards.total_counthibernate.search.coordination.event_processor.shards.assigned,则会自动考虑分片是静态的。

    • hibernate.search.coordination.processors.indexing.enabled现在是hibernate.search.coordination.event_processor.enabled

    • hibernate.search.coordination.processors.indexing.polling_interval现在是hibernate.search.coordination.event_processor.polling_interval

    • hibernate.search.coordination.processors.indexing.batch_size现在是hibernate.search.coordination.event_processor.batch_size

  • HSEARCH-4209HSEARCH-4295HSEARCH-4347:包含出站事件的表已更改其名称和内容,并且现在需要一个新的“代理”表。您需要删除当前的出站事件表并重新创建必要的表

其他改进和错误修复

  • HSEARCH-4369:出站事件处理器现在将不再等待轮询间隔的持续时间(默认为100毫秒)来处理两个事件批。

  • HSEARCH-4194:如果处理出站事件失败,Hibernate Search现在将等待一段时间然后再尝试。设置配置属性hibernate.search.coordination.event_processor.retry_delay来控制延迟。

  • HSEARCH-4282:现在可以通过配置属性hibernate.search.coordination.event_processor.transaction_timeout提高事件处理的事务超时。

  • HSEARCH-4307:Hibernate Search在启动时记录其自身版本的检测现在即使在本地映像上也能正常工作。

  • HSEARCH-4331:我们添加了一些默认的标识符桥。

    所有在Hibernate Search 5中支持用于文档标识符的类型现在也应支持在Hibernate Search 6中(尽管可能具有不同的格式),java.util.Class除外

  • HSEARCH-4354: Hibernate Search 将不再检索并尝试解释未参与索引的属性的 Hibernate ORM 元数据。这应该会减少未来元数据解析错误的影响。

  • HSEARCH-4033: 现在可以映射具有 @IdClass 的实体,前提是它们有一个带有 @DocumentId 注解的唯一、不可变属性。

  • HSEARCH-4273: 现在尊重 MassIndexer#cacheMode。该参数之前没有任何影响。

  • HSEARCH-4363: 修复了有时在关闭时发生的 NullPointerException

  • HSEARCH-4365: 在索引时,Hibernate Search 现在将忽略实体图中错误留下的已删除实体。

  • HSEARCH-4366: 在处理实体进行索引时抛出的异常现在将包括显示异常发生在实体图哪一部分的上下文。

还有更多。有关自上次发布以来的所有更改的完整列表,请参阅 发布说明

如何获取此版本

所有详细信息均可在 hibernate.org 上的专用页面 上找到并保持最新。

入门和迁移

对于新应用程序,请参阅 入门指南

对于现有应用程序,假设您还升级了依赖项,Hibernate Search 6.1 是 6.0 的直接替代品。有关已弃用配置和 API 的信息包含在 迁移指南 中。

反馈、问题、想法?

要取得联系,请使用以下渠道


回到顶部