我们刚刚发布了 Hibernate Search 6.0.0.Beta5。
这个版本主要更改了 Elasticsearch 后端访问索引的方式,为 Lucene 后端引入了延迟提交和近似实时查询,并在 Search DSL 中重命名了一些方法。它还包括对 Lucene 8.4、Elasticsearch 7.6 和 Hibernate ORM 5.4.12.Final 的升级。
新增功能
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发布之前被删除。
版本升级
-
HSEARCH-3799:升级到Lucene 8.4.1
-
HSEARCH-3829:升级到Elasticsearch 7.6
-
HSEARCH-3830:升级到Hibernate ORM 5.4.12.Final
Hibernate Search 6需要ORM 5.4.4.Final或更高版本才能正确运行。较早的5.4.x版本将无法正确运行。 |
不兼容的更改
-
HSEARCH-3808:自动索引的同步策略的名称已更改
-
queued
⇒async
。 -
committed
(默认)⇒write-sync
(仍然是默认设置)。 -
searchable
(通常用于测试)⇒sync
(仅推荐用于测试)。您需要更新配置中
hibernate.search.automatic_indexing.synchronization.strategy
属性的值。
-
-
如果您使用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上的专用页面上找到并保持最新。