我们刚刚发布了 Hibernate Search 6.0.0.Alpha4,这是 6.0 分支的第四个发布版本。本版本主要增加了“存在”谓词,通过允许绕过 DSL 和投影转换器或覆盖分析器来改进 DSL,恢复了 Elasticsearch AWS 集成,并将 Lucene 后端升级到 Lucene 8。
开始使用 Hibernate Search 6
如果您想立即深入了解新的、炫酷的 Hibernate Search 6,参考文档中的 入门指南 是一个好的起点。
Hibernate Search 6 仍在开发中,其 API 与 Search 5 有很大差异。 有关此分支的当前状态的更多信息,请参阅 hibernate.org 上 Search 6 的专用页面。 有关迁移和我们将如何帮助您的更多信息,请参阅 迁移指南。 |
新增功能
新的“存在”谓词
我们在 Search DSL 中增加了对“存在”谓词的支持,允许根据给定字段的非 null
值的存在或不存在来过滤文档
SearchQuery<MyEntity> query = searchSession.search(MyEntity.class).asEntity()
.predicate(f -> f.exists().onField("someField"))
.toQuery();
Elasticsearch AWS 集成已恢复
我们作为HSEARCH-3051的一部分恢复了AWS集成。请参阅HSEARCH-3051。在文档中专用部分配置您的后端以与AWS管理的Elasticsearch服务通信。
谓词中可以绕过转换器
DSL和投影转换器自动将用户期望的类型转换为后端暴露的底层类型。例如,java.util.Date
属性之间有转换器。
就像Search 5中的.ignoreFieldBridge
选项一样,现在在Search 6中也有一个选项来绕过这些转换器。
// When the value to match is a java.util.Date
Date dateToMatch = /* ... */;
SearchQuery<MyEntity> query = searchSession.search(MyEntity.class).asEntity()
.predicate(f -> f.match().onField("myJavaUtilDate").matching(dateToMatch))
.toQuery();
// When the value to match is a java.time.Instant
Instant instantToMatch = /* ... */;
SearchQuery<MyEntity> query = searchSession.search(MyEntity.class).asEntity()
.predicate(f -> f.match().onField("myJavaUtilDate").matching(instantToMatch, DslConverter.DISABLED))
.toQuery();
// When we need the projection as a java.util.Date
SearchQuery<Date> query = searchSession.search(MyEntity.class)
.asProjection(f -> f.field("myJavaUtilDate", Date.class)
.predicate(f -> f.matchAll())
.toQuery();
// When we need the projection as a java.time.Instant
SearchQuery<Instant> query = searchSession.search(MyEntity.class)
.asProjection(f -> f.field("myJavaUtilDate", Instant.class, ProjectionConverter.DISABLED)
.predicate(f -> f.matchAll())
.toQuery();
查询时可以覆盖分析器
分析器已经在Search 5中可以覆盖,但只能在QueryBuilder
级别和按字段逐个覆盖,如果你在谓词中有许多字段或者需要两个具有不同覆盖的谓词,这可能会很麻烦。
在Search 6中,现在可以按谓词逐个覆盖分析器。
SearchQuery<MyEntity> query = searchSession.search(MyEntity.class).asEntity()
.predicate(f -> f.match().onField("name_autocomplete").matching(userInput).analyzer("edgengram_query"))
.toQuery();
配置
从HSEARCH-3521开始,索引范围配置属性的属性键现在以前缀.backends.<后端名称>
开头。例如
hibernate.search.backends.myBackend.indexes.myIndex.lifecycle.strategy = create
有关更多信息,请参阅参考文档中的配置部分。
版本升级
-
HSEARCH-3531:升级到Lucene 8.0.0
-
HSEARCH-3533:升级到Hibernate ORM 5.4.2
其他改进和错误修复
-
HSEARCH-3507:改进与原生Elasticsearch/Lucene特性相关的命名方法的一致性(fromJsonString等)
-
HSEARCH-3554:Elasticsearch后端默认设置为10个元素命中限制
-
HSEARCH-2534:允许使用仅查询的分析器定义与Elasticsearch一起使用
-
HSEARCH-2185:使用DSL的短语查询不考虑
ignoreAnalyzer()
选项 -
HSEARCH-2423:投影未存储的字段应使用Elasticsearch引发异常
-
HSEARCH-2518:允许为分析器类/实例分配名称
-
HSEARCH-2757:允许在空间索引时使用FieldSelectors
-
HSEARCH-3530:更新参考文档中的日期格式
-
HSEARCH-3532:修复hibernate-search-util-common的java模块名称
-
HSEARCH-3538:在检查兼容性时忽略投影中的投影转换器的禁用
-
HSEARCH-3540:NONE Elasticsearch索引生命周期策略抛出AssertionFailure异常
-
HSEARCH-3543:允许将GeoPointBridges设置为可排序的以启用距离排序
-
HSEARCH-3548:带有zone = ZoneOffset.UTC的ZonedDateTime在Elasticsearch 5.6索引时失败
-
HSEARCH-3549:在Elasticsearch中索引MonthDay.of( 2, 29 )失败
-
HSEARCH-3557:DST变化期间较晚的偏移量ZonedDateTime被错误地解析
等等。有关自上次发布以来所有更改的完整列表,请参阅发行说明。
如何获取此版本
所有详细信息均可在hibernate.org的专用页面上找到,并保持最新状态:hibernate.org上的专用页面。