我们刚刚发布了 Hibernate Search 6.0.0.Beta9。
这次发布主要引入了更简单的配置属性方案、一个新的滚动 API、对多值字段的投影支持,以及所有当前实现功能的完整文档。
它还包括了对 Lucene 8.6.0、Elasticsearch 7.8.0 和 Hibernate ORM 5.4.19.Final 的升级。
新特性
更简单的配置方案
对 Hibernate Search 处理配置属性的方法的几项改进应该会简化您的配置文件的外观。
特别是
-
HSEARCH-3950: 默认后端现在有一个专用的前缀(
hibernate.search.backend
),这意味着单后端应用程序不再需要使用繁琐的命名后端方案(hibernate.search.backends.myBackend.[…] = […]
+hibernate.search.default_backend = myBackend
)。 -
HSEARCH-3102: 如果类路径中只有一个后端技术,则不再需要后端类型。
-
HSEARCH-3967: 索引级配置属性的默认值现在可以在后端级别提供,不再需要
index_defaults.
前缀。
例如,这
hibernate.search.default_backend myBackend
hibernate.search.backends.myBackend.type elasticsearch
hibernate.search.backends.myBackend.hosts es.mycompany.com:9200
hibernate.search.backends.myBackend.index_defaults.indexing.queue_count 4
现在可以更简单地写成这样
hibernate.search.backend.hosts es.mycompany.com:9200
hibernate.search.backend.indexing.queue_count 4
滚动API
截至 HSEARCH-3323,一个新的滚动API现已可用。
滚动保证了所有返回的命中结果都是一致的(没有重复),这使得它非常适合以小块处理大量结果集。
try ( SearchScroll<Book> scroll = searchSession.search( Book.class )
.where( f -> f.matchAll() )
.scroll( 20 ) ) {
for ( SearchScrollResult<Book> chunk = scroll.next();
chunk.hasHits(); chunk = scroll.next() ) {
for ( Book hit : chunk.hits() ) {
// ... do something with the hits ...
}
entityManager.flush();
entityManager.clear();
}
}
有关更多信息,请参阅文档的本节。
多值字段的投影
截至 HSEARCH-3391/HSEARCH-3944,现在可以将投影针对多值字段。
只需在您的投影上调用 .multi()
,它将自动变为返回 List<T>
的投影,其中 T
是您的字段类型
List<List<String>> hits = searchSession.search( Book.class )
.select( f -> f.field( "authors.lastName", String.class ).multi() )
.where( f -> f.matchAll() )
.fetchHits( 20 );
版本升级
-
HSEARCH-3965:升级到Lucene 8.6.0
-
HSEARCH-3956:升级到Elasticsearch 7.8
-
HSEARCH-3957/HSEARCH-3972:升级到ORM 5.4.19.Final
-
HSEARCH-3964:Hibernate Search现在定期针对JDK8、JDK11、JDK15和JDK16进行测试。
Hibernate Search 6需要ORM 5.4.4.Final或更高版本才能正确工作。早期5.4.x版本将无法正确工作。 |
重大变更
-
HSEARCH-3899:
query.explain()
现在期望传递实体ID而不是文档ID。简而言之,如果您的实体ID类型为Long,则需要传递Long(以前您必须传递String)。 -
HSEARCH-3939:在Lucene后端中存储
GeoPoint
字段的内部格式已更改。依赖于Lucene后端并声明GeoPoint
字段的应用程序应完全重新索引其数据。 -
HSEARCH-3948:
@IndexedEmbedded.storage
/ObjectFieldStorage
已重命名为@IndexedEmbedded.structure
/ObjectStructure
。旧的语法已弃用,将在6.0.0.Final
发布之前删除。
文档
-
HSEARCH-3962:现在文档包括一个部分,描述Hibernate Search的高级架构以及常见应用程序架构示例。
-
HSEARCH-3954:Hibernate Search内部结构文档(面向贡献者)已移动到https://docs.jboss.com.cn/hibernate/search/6.0/internals/html_single/。
-
HSEARCH-3262:文档现在包括有关兼容性政策的信息和链接,特别是针对Elasticsearch后端。
-
HSEARCH-3677:现在认为文档对所有当前实现的功能都是完整的。我们已经完成了以下部分
-
HSEARCH-3953:文档中关于如何使用手动调用Elasticsearch REST API来实现零停机重索引的部分现在指出,只有在模式没有更改的情况下(目前是这样)才可行。
其他改进和错误修复
-
HSEARCH-3636:现在可以按索引级别定义 Lucene 目录,这使得将索引放在完全不同的文件系统上变得更容易。
-
HSEARCH-3311:Hibernate Search 5中的分析器区分器不再可用,但现在已记录了针对同一问题的不同解决方案:替代绑定器。
-
HSEARCH-3929:Hibernate Search现在使用JDK11构建。二进制文件仍然与JDK8兼容,目前没有计划移除该兼容性。
-
HSEARCH-3307:当针对单个搜索查询中的多个索引时,现在对字段兼容性的检测更智能,并且不会产生假阴性。
-
HSEARCH-3941:当针对单个搜索查询中的多个索引时,距离排序将不再抛出
ClassCastException
。 -
HSEARCH-3266:使用来自Hibernate Search 5的配置属性现在会导致引导失败,以避免配置错误迁移的情况。
-
HSEARCH-3936:使用Elasticsearch后端的项目字段现在在生成的映射中不再标记为
stored = true
。 -
HSEARCH-3938:现在在使用
EnvironmentSynchronizer
(通常在JavaEE应用程序服务器中)时,Hibernate Search 6将正确启动和关闭。 -
HSEARCH-3937:现在在使用
EnvironmentSynchronizer
(通常在JavaEE应用程序服务器中)时,引导/关闭错误信息将正确显示。 -
HSEARCH-3506:现在可以在
matchAll
、matchId
、bool
和nested
断言上使用.boost(float)
。 -
HSEARCH-3960:Elasticsearch模式验证失败现在更清楚地指出它们是关于对现有Elasticsearch集群中现有索引的现有模式进行验证。
还有更多。有关自上次发布以来的完整更改列表,请参阅 发布说明。
如何获取此版本
所有详细信息都可在 hibernate.org上的专用页面 上找到并保持最新。