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

我们刚刚发布了 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项目解决此死锁之前,最好的解决办法是在您的application.properties/application.yaml中将属性spring.data.jpa.repositories.bootstrap-mode设置为deferred

我们还在尝试在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大规模索引作业。

有关更多信息,请参阅文档的这一部分

Lucene内置分析器定义

HSEARCH-2584开始,Lucene后端现在提供了一些内置分析器定义,以方便使用。

有关更多信息,请参阅文档的这一部分

滚动现在提供总命中数

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();
    }
}

Elasticsearch后端的可配置路径前缀

HSEARCH-4051开始,对于非标准设置(REST API端点不是根(/)),现在可以配置路径前缀。

有关更多信息,请参阅文档的这一部分

版本升级

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-3308HSEARCH-3356HSEARCH-3996HSEARCH-4006HSEARCH-4047:日志消息和异常消息现在更清晰、更一致。

  • HSEARCH-3402:异步/响应式方法现在返回 CompletionStage 而不是 CompletableFuture

  • HSEARCH-3905:现在,当使用 Lucene 后端针对对象字段时,exists 查询现在正确地考虑了动态字段。

  • HSEARCH-4000@IndexingDependency@AssociationInverseSide 现在是可重复的。

  • HSEARCH-3990HSEARCH-4068:对 Lucene 搜索查询进行了各种优化。

  • HSEARCH-4046:在对象字段的元模型中公开了按名称的静态子级映射。

  • HSEARCH-4048:字段模板的优先级现在正确工作,即使在对象字段模板和价值字段模板之间也是如此。

  • HSEARCH-4056LuceneIndexManager 现在允许计算索引大小(以字节为单位)。

  • HSEARCH-4070:Lucene 滚动不再忽略 totalHitCountThreshold

  • HSEARCH-4079:当超时小于 1ms 时,搜索查询不再系统性地超时。

  • HSEARCH-4080:现在,当 Lucene 搜索查询超时时,总命中数被正确地考虑为下界。

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

如何获取此版本

所有详细信息均可在hibernate.org的专用页面上找到,并保持最新状态:获取它

反馈、问题、想法?

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


回到顶部