我们刚刚发布了Hibernate Search 6.2.0.Alpha2,这是Hibernate Search下一个次要版本的alpha版本。
这个版本带来了更简单的and
/or
/not
谓词、多个租户的大规模索引,以及在outbox-polling
协调策略中将标识符切换为UUID。
6.2.0.Alpha2还包括许多错误修复和改进,与Elasticsearch 8.6和OpenSearch 2.5的兼容性,将-orm6
工件升级到Hibernate ORM 6.2.0.CR2,等等。
新增功能
Hibernate Search 6.2仍在开发中:一些功能可能还不完整或可能以不兼容的方式更改。 |
依赖升级
- Hibernate ORM (HSEARCH-4747/HSEARCH-4791)
-
Hibernate Search现在依赖于Hibernate ORM 5.6.14.Final,或Hibernate ORM 6.2.0.CR2用于-orm6工件。
- Elasticsearch (HSEARCH-4777)
-
Elasticsearch后端现在可以与Elasticsearch 8.6以及其他已经兼容的版本一起工作。
- OpenSearch (HSEARCH-4790)
-
Elasticsearch后端现在可以与OpenSearch 2.5以及其他已经兼容的版本一起工作。
- 其他
-
-
HSEARCH-4793:升级到Elasticsearch 客户端 8.6.1
-
HSEARCH-4659:升级到Avro 1.11.1
-
HSEARCH-4660: 升级到 GSON 2.9.1
-
HSEARCH-4661: 升级到 JBeret 1.4.8.Final
-
HSEARCH-4697: 升级到 Jackson 2.13.4
-
HSEARCH-4739: 升级到 jackson-databind 2.13.4.2
-
HSEARCH-4694: 与 Jandex 3.0 兼容
-
HSEARCH-4798: 升级到 AWS SDK 2.20.2
-
独立 POJO 映射器
在本版本中,对独立 POJO 映射器的配置进行了多项改进
-
HSEARCH-4615: 通过配置属性设置更多配置更加简单。
-
HSEARCH-4620: 索引计划同步现在通过策略配置,就像 ORM 映射器一样。
将索引内容映射到自定义类型(投影构造函数)
在之前的版本中,Hibernate Search 6.2 引入了通过映射自定义类型(通常是记录)来定义投影的能力,通过将 @ProjectionConstructor
注解应用到这些类型或其构造函数上。有关更多信息,请参阅参考文档的本节。
在本版本中,对投影构造函数进行了多项改进
-
HSEARCH-4579: 使用独立 POJO 映射器时,如果对未配置加载的实体类型进行搜索,Hibernate Search 现在将尝试使用该实体类型的投影构造函数(如果存在)。
-
HSEARCH-4591: 现在允许在 Lucene 后端对单值、扁平化对象字段使用对象投影。
-
HSEARCH-4669: 当投影构造函数无法应用于索引时,Hibernate Search 将提供更多信息。
-
HSEARCH-4673: 使用记录的默认构造函数作为投影构造函数时,不再需要
-parameters
编译器标志。
映射改进
-
HSEARCH-4714: 映射中的属性名称,例如 @IndexingDependency(derivedFrom = …),现在将进行早期检查,以便在出现语法错误时提供清晰的错误消息。
-
HSEARCH-4782: Hibernate Search 现在将自动推断 Hibernate ORM 实体的标识符的默认小数位数,之前它仅对非标识符属性进行推断。
搜索 DSL 改进
- 使用
and
/or
/not
谓词进行更简单的布尔运算符(HSEARCH-4601/HSEARCH-4645) -
对于更简单的用例,您现在可以避免使用相当复杂的
bool
谓词,而是使用新的and
/or
/not
谓词List<Book> hits = searchSession.search( Book.class ) .where( f -> f.and( f.match().field( "title" ) .matching( "robot" ), f.match().field( "description" ) .matching( "crime" ) ) ) .fetchHits( 20 );
List<Book> hits = searchSession.search( Book.class ) .where( f -> f.or( f.match().field( "title" ) .matching( "robot" ), f.match().field( "description" ) .matching( "investigation" ) ) ) .fetchHits( 20 );
List<Book> hits = searchSession.search( Book.class ) .where( f -> f.not( f.match() .field( "genre" ) .matching( Genre.SCIENCE_FICTION ) ) ) .fetchHits( 20 );
- 更简单且适用于
where( (f, b) → … )
的and
断言 (HSEARCH-4676) -
与 6.2.0.Alpha1 中的
bool
断言相比,现在的where( (f, b) → … )
提供了一个更简单的and
断言MySearchParameters searchParameters = getSearchParameters(); List<Book> hits = searchSession.search( Book.class ) .where( (f, root) -> { root.add( f.matchAll() ); if ( searchParameters.getGenreFilter() != null ) { root.add( f.match().field( "genre" ) .matching( searchParameters.getGenreFilter() ) ); } if ( searchParameters.getFullTextFilter() != null ) { root.add( f.match().fields( "title", "description" ) .matching( searchParameters.getFullTextFilter() ) ); } if ( searchParameters.getPageCountMaxFilter() != null ) { root.add( f.range().field( "pageCount" ) .atMost( searchParameters.getPageCountMaxFilter() ) ); } } ) .fetchHits( 20 );
- 更简单的
and
断言,适用于nested
断言 (HSEARCH-4676) -
与 6.2.0.Alpha1 中的
bool
断言相比,现在的f.nested( … )
提供了一个更简单的and
断言List<Book> hits = searchSession.search( Book.class ) .where( f -> f.nested( "authors" ) .add( f.match().field( "authors.firstName" ) .matching( "isaac" ) ) .add( f.match().field( "authors.lastName" ) .matching( "asimov" ) ) ) .fetchHits( 20 );
大规模索引改进
- 支持多租户的大规模索引 (HSEARCH-4321)
-
在多租户应用程序中,现在可以在创建大规模索引器时不传递任何租户标识符,并在 Hibernate Search 配置中提供租户列表的情况下,同时处理多个租户。有关更多信息,请参阅参考文档的本节。
- 大规模索引期间设置线程局部变量 (HSEARCH-1809)
-
大规模索引器现在有一个“大规模索引环境”的概念,允许在大量索引线程中设置自定义线程局部变量。有关更多信息,请参阅参考文档中的此部分。
- 更好的异常处理 (HSEARCH-4541)
-
在大量索引期间,Hibernate ORM 抛出的异常现在会像其他异常一样传递给失败处理器,而不是终止整个大量索引。
- 参数的更智能的默认值 (HSEARCH-4612)
-
当
dropAndCreateSchemaOnStart
被启用时,massIndexer
中现在默认禁用purgeAllOnStart
。
outbox-polling
协调改进
- 出盒事件和代理现在使用 UUID 作为它们的标识符 (HSEARCH-4678/HSEARCH-4748)
-
相关表的键现在使用 UUID 而不是长整型,以避免依赖于导致某些数据库上事件处理速度变慢的序列。迁移指南包括必要的数据库模式更改的迁移脚本。有关更多信息,请参阅参考文档的本节。
其他改进和错误修复
-
HSEARCH-4618:现在
BooleanPredicateOptionsCollector
/SimpleBooleanPredicateClausesCollector
提供了hasClause()
方法。 -
HSEARCH-4294:搜索 DSL 现在允许针对隐式 Elasticsearch 字段,如
_index
。 -
HSEARCH-4644:Hibernate Search 现在定期针对 CockroachDB 进行测试。
-
HSEARCH-4679:Hibernate Search 现在将自动简化只有一个子句的布尔断言。
-
HSEARCH-4305,HSEARCH-4708:当更改带有
@OneToOne(mappedBy = …) @IndexedEmbedded
注解的属性时,将不再跳过自动重新索引。 -
HSEARCH-4727:使用
outbox-polling
协调和 DB2 时,以前使用的OutboxEvent
表带有错误类型的payload
列blob(255)
,使其几乎无法使用。现在不再是这种情况。 -
HSEARCH-4634,HSEARCH-4647:现在
outbox-polling
协调与 CockroachDB 一起工作。 -
HSEARCH-4652: 当将
searchAnalyzer
设置为与全文字段上的analyzer
相同值时,使用Elasticsearch后端进行模式验证将不再失败。 -
HSEARCH-4654: Hibernate Search在启动或模式验证期间遇到大量并发失败时将不再发生死锁。
-
HSEARCH-4701: 当以Java模块(在modulepath中)运行Hibernate Search时,Elasticsearch模式管理将不再导致由于缺少模块间依赖而引发的异常。
-
HSEARCH-4703: 修复了
hibernate-search-mapper-orm-coordination-outbox-polling
的Java模块描述符中缺失条目,避免了在modulepath中运行Hibernate Search时出现错误。 -
HSEARCH-4724: 类路径扫描(特别是针对投影构造函数)不再忽略Spring Boot的"repackaged" JAR中的类。
还有更多。有关自上次发布以来的全部更改列表,请参阅发行说明。
如何获取此版本
所有详细信息均可在hibernate.org上的专门页面上找到并保持最新。
入门,迁移
对于新应用,请参考以下指南以进行Hibernate ORM集成
对于现有应用,假设您还升级了依赖项,Hibernate Search 6.2是6.1的即插即用替代品。有关已弃用配置和API的信息包含在迁移指南中。