我们刚刚发布了 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的专用页面上找到,并保持最新状态:获取它。