我们在此帮助您将现有的 Search 应用程序迁移到最新版本。
从 5.7.x 升级到 Hibernate Search 5.8.x
本指南旨在帮助您将使用 Hibernate Search 5.7.x 任何版本构建的现有应用程序迁移到 5.8.x 系列的最新版本。如果您想迁移不同版本,请参阅 Hibernate Search 迁移指南.
本文档提供迁移的指导意见。它引用了 Hibernate Search 版本 5.8.0.Final。如果您认为有遗漏或某些功能无法正常使用,请联系 我们. |
配置更改
hibernate.search.index_uninverting_allowed 现在默认值为 false,导致在您尝试对未标记为 @SortableField 的字段进行排序时抛出异常,而不是仅仅记录警告。
添加了一个新的请求超时,默认值为 60 秒:hibernate.search.default.elasticsearch.request_timeout。如果您执行的请求时间超过 60 秒,您将需要增加此超时,以及其他超时(套接字超时等)。有关更多信息,请参阅 文档.
Elasticsearch 集成中的索引模式管理策略选项已重命名,以便更符合类似的 JPA 选项
-
none保持不变 -
validate保持不变 -
merge现在为update -
create保持不变 -
recreate现在为drop-and-create -
recreate-delete现在为drop-and-create-and-drop
ram 目录提供程序已重命名为 local-heap。ram 名称仍然有效,但将在未来版本中删除。
日志中 JSON 的漂亮打印现在默认情况下已禁用。可以使用配置选项 hibernate.search.elasticsearch.log.json_pretty_printing 启用它。
API 更改
以下是应用程序编程接口的更改,这些更改需要在现有实现或客户端中进行更改。请参阅 javadoc 以了解更改/添加方法的预期行为。
org.hibernate.search.jpa.FullTextQuery、org.hibernate.search.FullTextQuery、org.hibernate.search.jpa.FullTextEntityManager、org.hibernate.search.FullTextSession
-
与将 JPA 实现与原生实现合并相关的内部更改可能会导致抛出异常类型的某些差异。如果您在全文查询执行周围有特定的异常处理代码,您可能需要再次测试它。有关更多信息,请参阅此提交消息。
-
FullTextEntityManager#getDelegate()现在返回实际的委托(它以前返回委托的委托)。
全文过滤器
-
查询 DSL 中的
.filterBy()现在接受任何org.apache.lucene.search.Query实例,而不仅仅是org.apache.lucene.search.Filter实例。 -
全文过滤器现在可以使用任何
org.apache.lucene.search.Query实例实现,并且不会限制您只能使用org.apache.lucene.search.Filter实例。 -
由于
org.apache.lucene.search.Filter类型在 Lucene 中已弃用,并且最终将被删除,因此建议您停止使用它。
分析器定义提供程序
-
分析器定义提供程序的接口已移动,因为它们最初是作为实验性概念引入的。它们的新位置是
-
org.hibernate.search.analyzer.definition.LuceneAnalysisDefinitionProvider -
org.hibernate.search.elasticsearch.analyzer.definition.ElasticsearchAnalysisDefinitionProvider
-
可排序字段
-
现在,排序字段预计要么被分配一个规范器,要么根本不被分析。您可以在参考文档中找到有关规范器的更多信息
@DynamicBoost,@Boost
-
索引时增强功能已弃用。从 Lucene 7 开始,索引时增强将不再可能。您应该使用查询时增强,例如,在使用 Hibernate Search 查询 DSL 构建查询时调用
org.hibernate.search.query.dsl.FieldCustomization#boostedTo(float)。
org.hibernate.search.annotations.Parameter:
-
在同一个参数数组中使用多个具有相同名称的
@Parameter现在将触发异常。
另外请注意,这些新功能可能在编写新代码时有所帮助,但不需要对现有代码进行任何更改。
-
.must()/.should在QueryBuilder中现在接受(并忽略)null查询。 -
QueryBuilder现在提供了一种新的queryString方法,允许以受控的方式执行由最终用户编写的查询。有关更多信息,请参阅这篇博文。 -
FullTextSession.unwrap( FullTextSession.class )现在可以正常工作(它以前会抛出异常)。
SPI 更改
以下是服务提供程序接口的更改,这些更改需要对现有实现或客户端进行更改。有关已更改/添加方法的预期行为,请参阅 javadoc。
一般更改
-
org.hibernate.search.spi.IndexedTypeIdentifier现在在我们的 SPI 中使用,用于引用索引类型,而不是java.lang.Class。许多接受或返回Class的方法已被替换为接受或返回IndexedTypeIdentifier的新版本。如果您使用DeleteByQueryWork,您可能需要将Class<?>转换为IndexedTypeIdentifier:在这种情况下,使用searchIntegrator.getIndexBindings().keyFromPojoType( myClass )。
org.hibernate.search.backend.spi.BackendQueueProcessor:
-
现在,后端预计通过注册
org.hibernate.search.backend.spi.Backend服务(而不是org.hibernate.search.backend.spi.BackendQueueProcessor)来连接到 Hibernate Search。然后,后端将在请求时创建队列处理器。注册org.hibernate.search.backend.spi.BackendQueueProcessor的先前机制仍然受支持,但已弃用,将在未来版本中删除。
org.hibernate.search.query.engine.spi.HSQuery:
-
filter(Filter)方法现在已弃用,将在未来版本中删除。使用全文过滤器,或在构建查询时使用布尔连接处理过滤。 -
targetedTypes方法已删除。目标类型信息现在应在创建查询时传递。
org.hibernate.search.spi.SearchIntegrator:
-
已弃用的
createHSQuery()方法已删除。改用createHSQuery(Query, Class…)。
org.hibernate.search.spi.BuildContext:
-
已弃用的
getIndexingStrategy()方法已删除,改为使用getIndexingMode()。
org.hibernate.search.spi.SearchIntegratorBuilder:
-
已弃用的
getIndexingStrategy()方法已删除,改为使用getIndexingMode()。
org.hibernate.search.spi.SearchFactoryBuilder:
-
此接口已删除,改为使用
org.hibernate.search.spi.SearchIntegratorBuilder。
org.hibernate.search.spi.SearchFactoryIntegrator:
-
此接口已删除,改为使用
org.hibernate.search.spi.SearchIntegrator。
以下更改不太可能影响任何人,但出于完整性考虑,在此提及。
org.hibernate.search.indexes.spi.IndexManagerType:
-
getMissingValueStrategy()已被替换为createMissingValueStrategy(ServiceManager serviceManager, SearchConfiguration cfg)。
org.hibernate.search.query.engine.spi.QueryDescriptor:
-
createHSQuery(SearchIntegrator)已删除 -
已添加一种新方法
createHSQuery(SearchIntegrator, IndexedTypeSet)。 -
已添加一种新方法
createHSQuery(SearchIntegrator, List<CustomTypeMetadata>)。
org.hibernate.search.engine.spi.EntityIndexBinding:
-
getSelectionStrategy()已被替换为getIndexManagerSelector() -
getIndexManagers()已删除。改用getIndexManagerSelector().all()。
org.hibernate.search.engine.spi.AbstractDocumentBuilder:
-
getMetadata()已删除,改为使用getTypeMetadata()。 -
close()已删除。
org.hibernate.search.analyzer.spi.AnalyzerStrategy:
-
已添加一种新方法
createProvidedAnalyzerReferences()。 -
initializeAnalyzerReferences(Collection, Map)已被替换为void initializeAnalyzerReferences(Collection, Map, Collection, Map)。 -
已添加一种新方法
createProvidedNormalizerReferences()。 -
已添加一种新方法
createNamedNormalizerReference(String)。 -
已添加一种新方法
createLuceneClassNormalizerReference(String)。
org.hibernate.search.analyzer.spi.ScopedAnalyzerReference:
-
getAnalyzer()已删除。
org.hibernate.search.analyzer.spi.ScopedAnalyzer:
-
此类已删除。
org.hibernate.search.analyzer.spi.AnalyzerReference:
-
getAnalyzer()已删除。 -
已添加一种新方法
isNormalizer(String)。
org.hibernate.search.store.spi.DirectoryHelper:
-
getVerifiedIndexDir(String, Properties, boolean)已删除
org.hibernate.search.store.spi.LockFactoryCreator:
-
createLockFactory现在期望的是Path而不是File。