我们刚刚发布了 Hibernate Search 6.0 的第一个候选版本:版本 6.0.0.CR1。
与 Hibernate Search 5 相比,由于 API 重构,更改非常广泛,但也有很多改进:当然包括升级到 Lucene 8 和 Elasticsearch 7,但还有更简洁的 Search DSL,带有类型化的结果类型,在 Bridges 中的字段声明有完全控制,更容易配置和更高效的自动索引,嵌套文档的运行时连接等。
在最终发布之前没有计划进行更多更改,所以现在 是测试基于 Hibernate Search 的应用程序的最佳时机,并尽快报告问题,以确保 6.0.0.Final 发布时一切正常。
Hibernate Search 6 入门
如果您想直接进入全新的 Hibernate Search 6,参考文档中包含的 入门指南 是一个好起点。
如果您想迁移基于 Hibernate Search 5 的应用程序,请注意 Hibernate Search 6 API 与 Hibernate Search 5 有很大差异。我们建议您查看 迁移指南。
注意 Spring 用户
请注意,Spring 中存在的一个错误 可能会导致您的应用程序在引导时挂起,除非您添加特定的配置。这影响了 Spring Boot 2.3.5.RELEASE 以及可能更早的 2.3.x 版本。 在Spring项目解决此死锁之前,最好的解决办法是在您的 我们还在尝试在Hibernate Search中实施一个解决方案,至少对于不使用Hibernate Search自定义bean的应用程序来说是这样。要跟踪此问题的进度,请参阅HSEARCH-4096。 |
报告错误
虽然这个版本已经过广泛测试,我们也不期待有任何特定问题,但候选发布版的目标是在最终发布前尽可能多地捕获错误。
如果您遇到问题,请与我们联系
-
当您不确定是使用问题还是错误时,请在带有
hibernate-search
标签的Stack Overflow或“Hibernate Search”类别中的我们的论坛上提问。 -
当您明显遇到错误时,请在JIRA上报告。
-
有关更多通信渠道,请参阅这里。
与Hibernate Search 5相比的新功能
有关Hibernate Search 6中的新功能和改进的概述,请参阅这里。
与Hibernate Search 6.0.0.Beta11相比的新功能
与上一个beta版本相比,此版本包括对ORM映射器的Java (JSR-352) 批量集成,以及对Hibernate ORM 5.4.23.Final的升级。
Java (JSR-352) 批量索引作业
从HSEARCH-3269开始,Hibernate Search 6再次通过专用模块包含一个JSR-352大规模索引作业。
有关更多信息,请参阅文档的这一部分。
滚动现在提供总命中数
从HSEARCH-4023开始,SearchScrollResult
现在提供总命中数。
try ( SearchScroll<Book> scroll = searchSession.search( Book.class )
.where( f -> f.matchAll() )
.scroll( 20 ) ) {
for ( SearchScrollResult<Book> chunk = scroll.next();
chunk.hasHits(); chunk = scroll.next() ) {
for ( Book hit : chunk.hits() ) {
// ... do something with the hits ...
}
long totalHitCount = chunk.total().hitCount();
entityManager.flush();
entityManager.clear();
}
}
版本升级
-
HSEARCH-4040:升级到Elasticsearch 7.9.2。
-
HSEARCH-4087:升级到Hibernate ORM 5.4.23.Final。
-
HSEARCH-4085:升级到Hibernate Commons Annotations 5.1.2.Final。
Hibernate Search 6需要ORM 5.4.4.Final或更高版本才能正确工作。更早的5.4.x版本可能导致潜在的运行时异常。 |
破坏性变更
-
HSEARCH-4041:删除了在Hibernate Search 6的Alpha/Beta阶段引入的过时类、接口和方法。这特别包括
-
RoutingKeyBridge
⇒ 使用RoutingBridge
代替。 -
以
get
/set
/is
开头的API方法 ⇒ 使用没有get
/set
/is
前缀的相应方法。 -
ObjectFieldStorage
⇒ 使用ObjectStructure
代替。 -
SearchResult#totalHitCount()
⇒ 使用.total().hitCount()
代替。 -
org.hibernate.search.mapper.orm.mapping.SearchIndexedEntity
应使用org.hibernate.search.mapper.orm.entity.SearchIndexedEntity
替代。 -
BuiltinContainerExtractors.ARRAY
应使用BuiltinContainerExtractors.ARRAY_OBJECT
替代。 -
@IndexedEmbedded(maxDepth = …)
应使用@IndexedEmbedded(includeDepth = …)
替代。 -
@IndexedEmbedded(storage = …)
应使用@IndexedEmbedded(structure = …)
替代。 -
搜索 DSL
-
asEntity()
/asEntityReference()
/asProjection(…)
/asProjections(…)
应使用selectEntity()
/selectEntityReference()
/select(…)
替代。 -
.predicate( f → …)
应使用.where( f → … )
替代。
-
-
-
HSEARCH-4071:在 Hibernate Search 6 的 Alpha/Beta 版本期间引入的配置属性已被删除。这包括
-
hibernate.search.default_backend
无等效项。使用前缀hibernate.search.backend.
配置默认后端,或使用前缀hibernate.search.backends.<backend name>.
配置命名后端。 -
前缀
hibernate.search.backend.index_defaults.
应在后台级别直接配置索引默认值,使用hibernate.search.backend.
。 -
前缀
hibernate.search.backends.<backend name>.index_defaults.
应在后台级别直接配置索引默认值,使用前缀hibernate.search.backends.<backend name>.
。
-
-
HSEARCH-3402:异步/响应式方法现在返回
CompletionStage
而不是CompletableFuture
。要将CompletionStage
转换为Future
,请调用.toCompletableFuture()
。
文档
-
HSEARCH-3283:现在提供了从 Hibernate Search 5 迁移到 Hibernate Search 6 的详细指南:请参阅此处。
-
HSEARCH-4055:基类 POJO 相关 API,如映射注解(
@Indexed
、@GenericField
),现在包含在 javadoc 中。 -
HSEARCH-4064:参考文档现在包括一个 "限制" 部分。
-
HSEARCH-4076:参考文档现在包括一个 "故障排除" 部分。
其他改进和错误修复
-
HSEARCH-3308、HSEARCH-3356、HSEARCH-3996、HSEARCH-4006、HSEARCH-4047:日志消息和异常消息现在更清晰、更一致。
-
HSEARCH-3402:异步/响应式方法现在返回
CompletionStage
而不是CompletableFuture
。 -
HSEARCH-3905:现在,当使用 Lucene 后端针对对象字段时,
exists
查询现在正确地考虑了动态字段。 -
HSEARCH-4000:
@IndexingDependency
、@AssociationInverseSide
现在是可重复的。 -
HSEARCH-3990、HSEARCH-4068:对 Lucene 搜索查询进行了各种优化。
-
HSEARCH-4046:在对象字段的元模型中公开了按名称的静态子级映射。
-
HSEARCH-4048:字段模板的优先级现在正确工作,即使在对象字段模板和价值字段模板之间也是如此。
-
HSEARCH-4056:
LuceneIndexManager
现在允许计算索引大小(以字节为单位)。 -
HSEARCH-4070:Lucene 滚动不再忽略
totalHitCountThreshold
。 -
HSEARCH-4079:当超时小于 1ms 时,搜索查询不再系统性地超时。
-
HSEARCH-4080:现在,当 Lucene 搜索查询超时时,总命中数被正确地考虑为下界。
还有更多。有关自上次发布以来的所有变更的完整列表,请参阅发布说明。
如何获取此版本
所有详细信息均可在hibernate.org的专用页面上找到,并保持最新状态:获取它。