我们刚刚发布了 Hibernate Search 6.0.0.Beta11。
此版本主要引入了默认分析器,一种限制自动重新索引仅限于同一实体更新的方式,AWS IAM 认证的全新实现,以及从 Search 5 迁移到 Search 6 的迁移助手。
还包括 Lucene 8.6.2 的升级和 Hibernate ORM 5.4.22.Final。
新增功能
默认分析器
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完全兼容,并且这些限制永远不会得到解决。这些模块中的所有代码都已弃用,将在下一个主要版本中删除。 |
在未来几周内,将提供有关如何在迁移时使用这些模块以及它们的限制的更多信息。特别是,预计很快会对迁移指南进行更新。
版本升级
-
HSEARCH-3991:升级到 Lucene 8.6.2
-
HSEARCH-4030:升级到 Hibernate ORM 5.4.22.Final
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-3994:
org.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-char
、array-int
、array-byte
等)的数组引入了变体。请参阅org.hibernate.search.mapper.pojo.extractor.builtin.BuiltinContainerExtractors
了解所有可用的容器提取器列表。
文档
-
HSEARCH-3995:所需 Lucene/Elasticsearch 版本现在在文档的 “兼容性”部分 中提到。
-
HSEARCH-4013:入门指南现在包括与某些框架相关的 部分。
其他改进和错误修复
-
HSEARCH-3071:已恢复对
@IndexedEmbedded.includeEmbeddedObjectId
的支持。 -
HSEARCH-4025:如果实体具有显式的
@DocumentId
,则对具有@IdClass
的实体进行索引的部分支持。目前不支持批量索引(HSEARCH-4033)。 -
HSEARCH-4002:
MappingAnnotatedProperty
(在注解处理器中使用)现在为任何给定的ContainerExtractorPath
暴露了属性的类型。 -
HSEARCH-4003:可重复注解现在在从
MappingAnnotatedElement
(在注解处理器中使用)检索时自动展开。 -
HSEARCH-3994:
SearchScope
现通过SearchScope#includedTypes
暴露了针对目标类型的元数据。 -
HSEARCH-3122:现在可以配置 Elasticsearch 映射的
dynamic
属性的默认值。请参阅 此文档部分。 -
HSEARCH-3243:Hibernate Search 将现在拒绝无法验证与绑定属性兼容性的标识符/值桥接器。在实现标识符/值桥接器时,通常将泛型类型参数
I
或T
设置为原始类。对于更高级的实现,您应依赖于IdentifierBinder
或ValueBinder
。 -
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
现在在超时时会抛出 JPAQueryTimeoutException
,而不是SearchTimeoutException
。 -
HSEARCH-4027:
ScrollResult.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上的专用页面上找到并保持最新。