本节介绍从版本 3.2.x 到 4.0.x 的重大更改,以及如何将已删除的功能替换为新引入的功能。
移除使用过的 Jackson Mapper
版本 4.0.x 中的一项更改是 Spring Data Elasticsearch 不再使用 Jackson Mapper 将实体映射到 Elasticsearch 所需的 JSON 表示形式(请参阅 Elasticsearch 对象映射)。
在版本 3.2.x 中,Jackson Mapper 是默认使用的。
可以通过显式配置它(元模型对象映射)切换到基于元模型的转换器(命名)。ElasticsearchEntityMapper
在版本 4.0.x 中,基于元模型的转换器是唯一可用的转换器,不需要显式配置。 如果您有一个自定义配置,通过提供如下 bean 来启用元模型转换器:
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
elasticsearchMappingContext(), new DefaultConversionService()
);
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
您现在必须删除此 bean,接口已被删除。ElasticsearchEntityMapper
一些用户对实体类进行了自定义 Jackson 注释,例如,为了在 Elasticsearch 中为映射文档定义自定义名称或配置日期转换。
这些不再被考虑在内。
Spring Data Elasticsearch 的注释现在提供了所需的功能。
有关详细信息,请参阅映射注释概述。@Field
从查询对象中删除隐式索引名称
在 3.2.x 中,不同的查询类喜欢或具有采用它们正在操作的索引名称或索引名称的属性。如果未设置这些值,则检查传入的实体以检索在批注中设置的索引名称。
在 4.0.x 中,索引名称现在必须在 类型的附加参数中提供。通过将其分离,现在可以对不同的索引使用一个查询对象。IndexQuery
SearchQuery
@Document
IndexCoordinates
例如,以下代码:
IndexQuery indexQuery = new IndexQueryBuilder()
.withId(person.getId().toString())
.withObject(person)
.build();
String documentId = elasticsearchOperations.index(indexQuery);
必须更改为:
IndexCoordinates indexCoordinates = elasticsearchOperations.getIndexCoordinatesFor(person.getClass());
IndexQuery indexQuery = new IndexQueryBuilder()
.withId(person.getId().toString())
.withObject(person)
.build();
String documentId = elasticsearchOperations.index(indexQuery, indexCoordinates);
为了更轻松地使用实体并使用包含在整体注释中的索引名称,添加了新方法,例如@Document
DocumentOperations.save(T entity)
;
新的操作界面
在版本 3.2 中,有一个接口定义了该类的所有方法。在版本 4 中,这些函数被拆分为不同的接口,使这些接口与 Elasticsearch API 保持一致:ElasticsearchOperations
ElasticsearchTemplate
-
DocumentOperations
是与功能相关的文档,如保存或删除 -
SearchOperations
包含要在 Elasticsearch 中搜索的函数 -
IndexOperations
定义要对索引进行操作的函数,例如索引创建或映射创建。
ElasticsearchOperations
现在扩展 和 HAS 方法访问实例。DocumentOperations
SearchOperations
IndexOperations
版本 3.2 中接口中现在移动到接口的所有函数仍然可用,它们被标记为已弃用,并具有委托给新实现的默认实现:ElasticsearchOperations IndexOperations |
/**
* Create an index for given indexName.
*
* @param indexName the name of the index
* @return {@literal true} if the index was created
* @deprecated since 4.0, use {@link IndexOperations#create()}
*/
@Deprecated
default boolean createIndex(String indexName) {
return indexOps(IndexCoordinates.of(indexName)).create();
}
版本 3.2 中接口中现在移动到接口的所有函数仍然可用,它们被标记为已弃用,并具有委托给新实现的默认实现:ElasticsearchOperations IndexOperations |
弃用
方法和类
许多函数和类已被弃用。这些函数仍然有效,但 Javadocs 显示了它们应该被替换的内容。
/*
* Retrieves an object from an index.
*
* @param query the query defining the id of the object to get
* @param clazz the type of the object to be returned
* @return the found object
* @deprecated since 4.0, use {@link #get(String, Class, IndexCoordinates)}
*/
@Deprecated
@Nullable
<T> T queryForObject(GetQuery query, Class<T> clazz);
清除
-
如前所述,该接口已被删除。
ElasticsearchEntityMapper
-
该接口已合并到其基本接口中,因此可以将其替换为 。
SearchQuery
Query
Query
-
删除了方法和接口。 这些可用于解析 Elasticsearch 的结果,以了解使用基于 Jackson 的映射器完成的响应映射不够的情况。 从 4.0 版本开始,有了新的搜索结果类型来从 Elasticsearch 响应返回信息,因此无需公开这种低级功能。
org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery query, ResultsExtractor<T> resultsExtractor);
org.springframework.data.elasticsearch.core.ResultsExtractor
-
低级方法 ,并已从接口中删除。 对于低级滚动 API 访问,类上有 和 方法。
startScroll
continueScroll
clearScroll
ElasticsearchOperations
searchScrollStart
searchScrollContinue
searchScrollClear
ElasticsearchRestTemplate