Hibernate Search 6 已经随着 6.0.0.Beta1 版本的发布达到了 Beta 状态。这次发布消除了最后一个主要障碍:它修复了 API 中剩余的少量不一致性,并完成了主要功能的文档。这次发布还引入了类似 Search 5 的分面功能的聚合。
Beta 状态的含义
基本上,达到 Beta 状态意味着 Hibernate Search 6 将从现在开始更加稳定
-
最常用的 API 不再预期发生变化。
-
实现已经过充分测试,按预期工作。
-
参考文档涵盖了所有常见用例和大多数高级用例,并且在最终发布之前变化不大。
它仍然是 Beta 版本,而不是候选版本,因为最终发布之前仍然有很多工作要做
-
一些不太常用的功能,如滚动或错误处理程序,仍然缺失。
-
一些改进,如搜索分析器或零停机时间的大规模索引,仍然缺失。
-
性能令人满意(没有明显的瓶颈),但需要更多彻底的测试。
-
根据解决上述问题的需要,我们可能仍将在后续的 Beta 版本中更改索引格式,这需要重新索引。
新增内容
聚合 DSL
自 HSEARCH-3649 以来,Hibernate Search 6 现在提供了一种 DSL 来构建聚合,即基于给定搜索查询的所有命中结果进行聚合的结果。
目前支持的聚合相当简单,但将来会添加更多。
-
术语聚合会产生每个给定字段值的命中次数。
AggregationKey<Map<Genre, Long>> countsByGenreKey = AggregationKey.of( "countsByGenre" ); SearchResult<Book> result = searchSession.search( Book.class ) .predicate( f -> f.matchAll() ) .aggregation( countsByGenreKey, f -> f.terms() .field( "genre", Genre.class ) ) .fetch( 20 ); Map<Genre, Long> countsByGenre = result.getAggregation( countsByGenreKey );
-
给定一系列范围,范围聚合会产生每个给定字段值范围的命中次数。
AggregationKey<Map<Range<Double>, Long>> countsByPriceKey = AggregationKey.of( "countsByPrice" ); SearchResult<Book> result = searchSession.search( Book.class ) .predicate( f -> f.matchAll() ) .aggregation( countsByPriceKey, f -> f.range() .field( "price", Double.class ) .range( 0.0, 10.0 ) .range( 10.0, 20.0 ) .range( 20.0, null ) ) .fetch( 20 ); Map<Range<Double>, Long> countsByPrice = result.getAggregation( countsByPriceKey );
这提供了Hibernate Search 5的“分面”功能所提供的所有功能,除了“钻取”之外,而“钻取”可以通过谓词 DSL 直观地重现。此外,新的聚合功能解决了Search 5中分面的一些长期问题。
-
HSEARCH-1372/HSEARCH-2111:聚合 API 使用清晰、一致的名字。
-
HSEARCH-2472/HSEARCH-2954:编码不再仅限于数值字段或文本:具有Java 8日期/时间类型的字段也可以进行聚合,例如
LocalDate
,并且它们使用Elasticsearch后端的专用date
数据类型。 -
HSEARCH-1748:尝试在不受支持的字段上创建聚合现在将在构建查询期间触发异常,而不仅仅是返回空结果。
-
HSEARCH-2446:现在可以在由桥梁声明的字段上使用聚合(分面)。
-
离散聚合不再需要将数字索引为文本。
版本升级
-
HSEARCH-3706:升级到Hibernate ORM 5.4.5.Final
Hibernate Search 6需要ORM 5.4.4.Final或更高版本才能正确运行。较早的5.4.x版本将无法正确运行。 |
文档
自 HSEARCH-3270 以来,Hibernate Search 6的所有主要功能都已得到文档记录。
以下是自上次发布以来我们添加或完成的部分
-
HSEARCH-3674/HSEARCH-3675:核心概念:全文搜索、映射和分析
-
HSEARCH-3676、HSEARCH-3673、HSEARCH-2224、HSEARCH-3679:将Hibernate ORM实体映射到索引,特别是
@IndexedEmbedded
、容器提取和调整自动重新索引。 -
HSEARCH-3692:自定义桥梁
-
HSEARCH-3615:查询 DSL
-
HSEARCH-3681:MassIndexer
向后不兼容的 API 变更
这次有很多向后不兼容的变更,因为这是Beta版之前的最后一批变更。
-
HSEARCH-3705:索引实体类型的默认索引名称现在是实体名称而不是完全限定类名。
-
HSEARCH-3707:在
SearchQuery.fetch(Integer, Integer)
中的limit和offset参数已被交换。 -
HSEARCH-3669:现在已弃用
fetch()
和fetchHits()
方法:请使用fetchAll
和fetchAllHits
代替。 -
HSEARCH-3606:将
SearchWriter
重命名为SearchWorkspace
,将SearchSessionWritePlan
重命名为SearchIndexingPlan
。 -
HSEARCH-3623:分析定义 DSL 的语法已更新。
-
现在无法再使用 Lucene 分析定义 DSL 将分析器/归一化器定义链式调用。
-
在 Elasticsearch 分析定义 DSL 中,以
with
前缀的方法已弃用,现在推荐使用不带此前缀的新方法(withTokenizer()
⇒tokenizer()
)。
-
-
HSEARCH-3671:
SearchScope
现在是会话无关的。主要影响是您不能再写scope.search()
:请使用searchSession.search(scope)
代替。 -
HSEARCH-3691:
@GeoPointBinding
无法再用于GeoPoint
类型的属性上:请使用@GenericField
代替。 -
HSEARCH-3687:DSL 步骤接口的泛型类型参数已更改。这只会影响您将 DSL 步骤存储在变量中的情况,这不被推荐(您应该只是链式调用)。
-
HSEARCH-3708:范围谓词 DSL 现在通过新的
Range
类提供了定义匹配范围的语法。旧语法仍然有效,但已弃用。 -
-
org.hibernate.search.mapper.pojo.dirtiness.ReindexOnUpdate
已移动到org.hibernate.search.mapper.pojo.automaticindexing.ReindexOnUpdate
-
包
org.hibernate.search.engine.search.dsl.predicate
已移动到org.hibernate.search.engine.search.predicate.dsl
-
包
org.hibernate.search.engine.search.dsl.sort
已移动到org.hibernate.search.engine.search.sort.dsl
-
包
org.hibernate.search.engine.search.dsl.projection
已移动到org.hibernate.search.engine.search.projection.dsl
-
包
org.hibernate.search.engine.search.dsl.aggregation
已移动到org.hibernate.search.engine.search.aggregation.dsl
-
包
org.hibernate.search.backend.elasticsearch.search.dsl.predicate
已移动到org.hibernate.search.backend.elasticsearch.search.predicate.dsl
-
包
org.hibernate.search.backend.elasticsearch.search.dsl.sort
已移动到org.hibernate.search.backend.elasticsearch.search.sort.dsl
-
包
org.hibernate.search.backend.elasticsearch.search.dsl.projection
已移动到org.hibernate.search.backend.elasticsearch.search.projection.dsl
-
包
org.hibernate.search.backend.elasticsearch.search.dsl.aggregation
已移动到org.hibernate.search.backend.elasticsearch.search.aggregation.dsl
-
包
org.hibernate.search.backend.lucene.search.dsl.predicate
已移动到org.hibernate.search.backend.lucene.search.predicate.dsl
-
包
org.hibernate.search.backend.lucene.search.dsl.sort
已移动到org.hibernate.search.backend.lucene.search.sort.dsl
-
包
org.hibernate.search.backend.lucene.search.dsl.projection
已移动到org.hibernate.search.backend.lucene.search.projection.dsl
-
包
org.hibernate.search.backend.lucene.search.dsl.aggregation
已移动到org.hibernate.search.backend.lucene.search.aggregation.dsl
-
org.hibernate.search.engine.search.SearchPredicate
已移动到org.hibernate.search.engine.search.predicate.SearchPredicate
-
org.hibernate.search.engine.search.SearchSort
已移动到org.hibernate.search.engine.search.sort.SearchSort
-
org.hibernate.search.engine.search.SearchProjection
已移动到org.hibernate.search.engine.search.projection.SearchProjection
-
org.hibernate.search.engine.search.DocumentReference
已移动到org.hibernate.search.engine.backend.common.DocumentReference
-
-
HSEARCH-3441:DSL 方法现在使用一致的措辞。
-
在程序映射 API 中
-
withExtractor()
已重命名为extractor()
-
withExtractors()
已重命名为extractors()
-
withoutExtractors()
已重命名为noExtractors()
-
-
在谓词 DSL 中
-
onField()
/orField()
/onFields()
/orFields()
已弃用。请使用无前缀的版本(例如,onField()
⇒field()
)。 -
withConstantScore()
已弃用:请使用constantScore()
。 -
boostedTo()
已弃用:请使用boost()
。 -
withAndAsDefaultOperator()
已弃用:请使用defaultOperator(BooleanOperator)
。 -
withSlop()
已弃用:请使用slop()
。
-
-
在排序 DSL 中
-
以
by
为前缀的方法已弃用。请使用无前缀的版本(例如,byField()
⇒field()
)。 -
onMissingValue()
已弃用:请使用missing()
。 -
sortLast()
已弃用:请使用last()
。 -
sortFirst()
已弃用:请使用first()
。
-
-
-
HSEARCH-859:一些配置属性已更改,以提高一致性。
-
仅更改名称的配置属性
-
hibernate.search.backends.myBackend.analysis_configurer
→hibernate.search.backends.myBackend.analysis.configurer
-
hibernate.search.backends.myBackend.multi_tenancy_strategy
→hibernate.search.backends.myBackend.multi_tenancy.strategy
-
hibernate.search.mapping_configurer
→hibernate.search.mapping.configurer
-
hibernate.search.enable_annotation_mapping
→hibernate.search.mapping.process_annotations
-
hibernate.search.autoregister_listeners
→hibernate.search.enable
-
-
hibernate.search.enable_configuration_property_tracking
已重命名为hibernate.search.configuration_property_checking.strategy
,预期值也发生了变化:默认为warn
,使用ignore
禁用检查。 -
配置属性的枚举已移动到适当的包中。
-
在
*Settings
类中列出的属性键现在在相关的地方包括hibernate.search.
前缀。使用*Settings.Radicals
为无前缀的属性键。
-
其他改进和错误修复
-
HSEARCH-3667:Hibernate Search 6 现在在启用 Hibernate Envers 时可以正确工作:它可以正确启动并能索引版本化实体的最新版本。感谢 Damien Clement d’Huart 报告此问题并提供修复。
-
HSEARCH-2254:嵌套字段内的单值排序现在可以正确工作。
-
HSEARCH-3715:在批量索引时,再次可以设置自定义监控器。
-
HSEARCH-3670:
java.util.Date
属性持有java.sql.Date
值现在可以正确索引。 -
HSEARCH-3690:现在正确支持类型为字符串的实体标识符。
等等。有关上一版本以来所有更改的完整列表,请参阅发布说明。
如何获取此版本
所有详细信息均可在 hibernate.org 的专用页面 上找到并保持最新。