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

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

此版本主要引入了默认分析器,一种限制自动重新索引仅限于同一实体更新的方式,AWS IAM 认证的全新实现,以及从 Search 5 迁移到 Search 6 的迁移助手。

还包括 Lucene 8.6.2 的升级和 Hibernate ORM 5.4.22.Final。

Hibernate Search 6 入门

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

Hibernate Search 6 API 与 Hibernate Search 5 相差很大。

有关迁移信息和我们将如何帮助您的更多信息,请参阅 迁移指南

新增功能

默认分析器

Lucene 后端和 Elasticsearch 后端现在都有一个默认分析器定义,即使您没有配置 分析,也可以使用它。

得益于这个新的默认分析器,@FullTextField(analyzer = …​) 中的 analyzer 属性不再需要设置:对于简单的用例,您可以直接使用 @FullTextField 而不带任何参数,这将创建一个使用默认分析器的索引字段。

这应该会使使用Hibernate Search进行实验更加容易,即使单个默认分析器可能不足以满足现实应用的需求。

有关默认分析器的更多信息,请参阅Lucene的相关信息Elasticsearch的相关信息

ReindexOnUpdate.SHALLOW:将自动重新索引限制为同一实体的更新

HSEARCH-4001以来,现在可以将@IndexingDependency(reindexOnUpdate = ReindexOnUpdate.SHALLOW)应用于关联。如果该关联也具有@IndexedEmbedded,则

  • @Indexed实体被索引时,由关联指向的实体将像往常一样索引嵌入(此处无变化)。

  • 当关联发生变化(关联实体被添加或删除)时,则@Indexed实体将像往常一样自动重新索引(此处无变化)。

  • 当关联实体被修改(例如,它们的name属性发生变化)时,@Indexed实体将不会自动重新索引。

这对于关联到“参考”实体(例如,类别、类型、城市、国家等)特别有用,这些实体预计不会发生变化,并且无法暴露关联的逆侧(例如,城市⇒地址),这对于自动重新索引是必要的。

有关更多信息,请参阅此部分文档

AWS IAM身份验证的新实现

模块org.hibernate.search:hibernate-search-backend-elasticsearch-aws提供AWS IAM身份验证,因此应用程序可以使用AWS Elasticsearch服务作为后端,这是一种替代本地集群或Elastic自己的云服务的方法。

此模块已重写以依赖于AWS SDK而不是第三方库。这修复了已知的请求签名错误(HSEARCH-3655),并为提供凭证的其他方式打开了道路。

HSEARCH-3560以来,您可以使用AWS SDK支持的所有类型的凭证,特别是EC2实例角色。有关更多信息,请参阅此部分文档

由于重写了此模块,与AWS身份验证相关的配置属性已更改。有关更多详细信息,请参阅破坏性更改

从Search 5迁移到Search 6的应用程序迁移助手

HSEARCH-3282以来,我们发布了两模块,它们与Hibernate Search 5 API部分兼容,这些API由Hibernate Search 6实现支持。

这些模块通过确保依赖于最常用的API(搜索DSL等)的代码继续编译和运行,可以简化迁移过程。想法是暂时使用迁移助手,以便大多数应用程序代码(搜索查询等)正常工作,这样更容易关注迁移配置,并评估剩余代码迁移所需的工作量。

这些模块不应在生产环境中使用。它们具有限制,阻止与Hibernate Search 5完全兼容,并且这些限制永远不会得到解决。这些模块中的所有代码都已弃用,将在下一个主要版本中删除。

在未来几周内,将提供有关如何在迁移时使用这些模块以及它们的限制的更多信息。特别是,预计很快会对迁移指南进行更新。

版本升级

Hibernate Search 6 需要 ORM 5.4.4.Final 或更高版本才能正确工作。较早的 5.4.x 版本可能会导致难以理解的运行时异常。

破坏性变更

  • HSEARCH-3560:配置 AWS 认证的属性已更改

    • hibernate.search.backend.aws.signing.region 现在是 hibernate.search.backend.aws.region

    • 为了在配置属性中静态指定凭据,您必须将 hibernate.search.backend.aws.credentials.type 设置为 static,并设置以下两个属性。

    • hibernate.search.backend.aws.signing.access_key 现在是 hibernate.search.backend.aws.credentials.access_key_id

    • hibernate.search.backend.aws.signing.secret_key 现在是 hibernate.search.backend.aws.credentials.secret_access_key

    • hibernate.search.backend.aws.signing.enabled 没有变化。

  • HSEARCH-3994org.hibernate.search.mapper.orm.mapping.SearchIndexedEntity 现已弃用,将在 Hibernate Search 6.0.0.CR1 发布前被移除。请改用 org.hibernate.search.mapper.orm.entity.SearchIndexedEntity

  • 孵化接口 org.hibernate.search.mapper.pojo.extractor.ContainerExtractor 已更改;请参阅其 javadoc 了解新接口的详细信息。

  • array 容器提取器已重命名为 array-object。为每种原始类型(如 array-chararray-intarray-byte 等)的数组引入了变体。请参阅 org.hibernate.search.mapper.pojo.extractor.builtin.BuiltinContainerExtractors 了解所有可用的容器提取器列表。

文档

其他改进和错误修复

  • HSEARCH-3071:已恢复对 @IndexedEmbedded.includeEmbeddedObjectId 的支持。

  • HSEARCH-4025:如果实体具有显式的 @DocumentId,则对具有 @IdClass 的实体进行索引的部分支持。目前不支持批量索引(HSEARCH-4033)。

  • HSEARCH-4002MappingAnnotatedProperty(在注解处理器中使用)现在为任何给定的 ContainerExtractorPath 暴露了属性的类型。

  • HSEARCH-4003:可重复注解现在在从 MappingAnnotatedElement(在注解处理器中使用)检索时自动展开。

  • HSEARCH-3994SearchScope 现通过 SearchScope#includedTypes 暴露了针对目标类型的元数据。

  • HSEARCH-3122:现在可以配置 Elasticsearch 映射的 dynamic 属性的默认值。请参阅 此文档部分

  • HSEARCH-3243:Hibernate Search 将现在拒绝无法验证与绑定属性兼容性的标识符/值桥接器。在实现标识符/值桥接器时,通常将泛型类型参数 IT 设置为原始类。对于更高级的实现,您应依赖于 IdentifierBinderValueBinder

  • HSEARCH-3864:在批量索引期间抛出的 java.lang.Error 现在不再被抑制,而是传播给调用者。

  • HSEARCH-3997:基本类型数组(int[]/float[]/等)的映射现在按预期工作:在索引时不再导致ClassCastException

  • HSEARCH-3998:在类型层次结构中,对(非抽象)父类进行大量索引时,现在将正确忽略该子类。

  • HSEARCH-3999:删除一个实体,其实体的@ElementCollection在另一个实体中索引嵌入,不再导致LazyInitializationException

  • HSEARCH-4009:修复了一个边缘情况,其中@IndexingDependency(derivedFrom = …​)会导致引导失败。

  • HSEARCH-4011:Hibernate Search 的 ScrollableResults 现在在超时时会抛出 JPA QueryTimeoutException,而不是 SearchTimeoutException

  • HSEARCH-4027ScrollResult.timedOut()有时会返回false,即使发生了Lucene超时;这个问题已修复。

  • HSEARCH-4028:Elasticsearch的SearchResultTotal现在在超时后正确报告近似总命中数。

  • HSEARCH-3917:性能改进:当显式请求降序评分排序时,Hibernate Search现在使用TopScoreDocCollector而不是TopFieldDocCollector(而不仅仅是默认情况下)。

  • HSEARCH-3947:性能改进:当查询未设置要检索的命中数上限且命中数少于10,000时,Hibernate Search不再为收集器创建大型数组。

  • HSEARCH-4017:性能改进:在提取投影时,Lucene后端不再扫描不包含任何返回命中的索引段。

  • HSEARCH-4018:性能改进:当索引没有嵌套文档时,Lucene后端现在跳过一些过滤器。

  • HSEARCH-4019:性能改进:Lucene后端现在仅在绝对必要时才使用TotalHitCountCollector

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

如何获取此版本

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

反馈、问题、想法?

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


返回顶部