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

我们刚刚发布了 Hibernate Search 6.0.0.Beta5。

这个版本主要更改了 Elasticsearch 后端访问索引的方式,为 Lucene 后端引入了延迟提交和近似实时查询,并在 Search DSL 中重命名了一些方法。它还包括对 Lucene 8.4、Elasticsearch 7.6 和 Hibernate ORM 5.4.12.Final 的升级。

开始使用 Hibernate Search 6

如果您想立即深入了解新的、光鲜的 Hibernate Search 6,参考文档中的 入门指南 是一个很好的起点。

Hibernate Search 6 API 与 Search 5 有显著不同。

有关迁移的更多信息以及我们打算如何帮助您,请参阅 迁移指南

新增功能

Elasticsearch 索引的别名

HSEARCH-3791 开始,Elasticsearch 索引现在仅通过别名访问。Hibernate Search 为每个索引依赖于两个别名:一个用于写入(<myindex>-write)和一个用于读取(<myindex>-read)。

这种设置是 Hibernate Search 未来版本中引入“零停机时间”重新索引的第一步,其中在重新索引的同时搜索查询仍然返回结果。有关如何更改别名名称的更多信息,请参阅 参考文档的这一部分

由于这次变更,您需要执行以下操作之一:

  • 手动为每个索引创建两个别名;

  • 或者删除您的索引,让Hibernate Search在启动时重新创建空索引:它将创建别名。在这种情况下,您还需要重新索引

Lucene后端的支持延迟提交和近似实时

HSEARCH-3775以来,Lucene后端现在可以配置为定期(例如每秒)提交写入器或刷新读取器,而不是尽可能快地进行操作。

此功能在Search 5中已经可用,但暴露的方式不同,可以提高性能。有关详细信息,请参阅此文档部分

修复了Lucene后端嵌套文档的索引问题

HSEARCH-3834修复了一个bug,该bug导致在删除根文档后,嵌套文档会在索引中无限期地保留。此bug不会影响搜索查询的结果:在删除根文档后,嵌套文档将不可见。然而,这可能导致索引占用比必要的更多空间。

为了清理您的索引,您应该重新索引

Search DSL中的更通用措辞

HSEARCH-3807以来,Search DSL中的一些方法已被重命名

  • searchSession.search(…​).predicate(…​)变为searchSession.search(…​).where(…​)

  • searchSession.search(…​).asProjection(…​)变为searchSession.search(…​).select(…​)

  • searchSession.search(…​).asProjections(…​)变为searchSession.search(…​).select(…​)

  • searchSession.search(…​).asEntity(…​)变为searchSession.search(…​).selectEntity()

  • searchSession.search(…​).asEntityReference(…​)变为searchSession.search(…​).selectEntityReference()

尽管存在旧名称的方法,但它们已被弃用。它们将在Hibernate Search 6.0.0.Final发布之前被删除。

版本升级

Hibernate Search 6需要ORM 5.4.4.Final或更高版本才能正确运行。较早的5.4.x版本将无法正确运行。

不兼容的更改

  • HSEARCH-3808:自动索引的同步策略的名称已更改

    • queuedasync

    • committed(默认)⇒ write-sync(仍然是默认设置)。

    • searchable(通常用于测试)⇒ sync(仅推荐用于测试)。

      您需要更新配置中hibernate.search.automatic_indexing.synchronization.strategy属性的值。

  • flush()不再隐式刷新索引;您需要使用新的refresh()操作。

  • 如果您使用Lucene后端并利用嵌套文档(`@IndexedEmbedded(storage = NESTED)`),则需要如上所述进行完整重新索引。

  • 如果您使用Elasticsearch后端,则必须删除并重新创建您的索引。有关详细信息或解决方案,请参阅如上所述

文档

  • HSEARCH-3808:自动索引同步策略的文档进行了改进,现在应该更加清晰。

其他改进和错误修复

  • HSEARCH-3833:在不同的本地堆索引上写入将引发LockObtainFailedException

  • HSEARCH-3801:Hibernate Search阻止加载非Hibernate批处理作业

  • HSEARCH-3815:停止发布mapper-javabean模块

  • HSEARCH-3819:当验证或迁移具有null_value的geo_point字段的Elasticsearch模式时,将引发JsonSyntaxException

  • HSEARCH-3824:根据提供的路由键自动过滤搜索结果

  • HSEARCH-3825:从POJO映射器中清除文档将导致NPE

  • HSEARCH-3836:允许显式路由清除

  • HSEARCH-3778:删除"index_metadata_complete"配置属性

  • HSEARCH-3779:删除自动索引优化

  • HSEARCH-3826:取消对非独占索引使用的支持

  • HSEARCH-3831:允许在配置中设置自动索引同步策略为自定义bean

还有更多。有关自上一版本以来的全部更改列表,请参阅发行说明

如何获取此版本

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

反馈、问题、想法?

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


返回顶部