从 3.2.x 升级到 4.0.x

本节介绍从版本 3.2.x 到 4.0.x 的重大更改,以及如何将已删除的功能替换为新引入的功能。spring-doc.cadn.net.cn

移除使用过的 Jackson Mapper

版本 4.0.x 中的一个变化是 Spring Data Elasticsearch 不再使用 Jackson Mapper 将实体映射到 Elasticsearch 所需的 JSON 表示形式(参见 Elasticsearch 对象映射)。 在版本 3.2.x 中,Jackson Mapper 是使用的默认版本。 可以切换到基于元模型的转换器(名为ElasticsearchEntityMapper),通过显式配置它 (Meta Model Object Mapping)。spring-doc.cadn.net.cn

在 4.0.x 版本中,基于元模型的转换器是唯一可用的转换器,不需要显式配置。 如果你有一个自定义配置来启用元模型转换器,通过提供这样的 bean:spring-doc.cadn.net.cn

@Bean
@Override
public EntityMapper entityMapper() {

  ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
    elasticsearchMappingContext(), new DefaultConversionService()
  );
  entityMapper.setConversions(elasticsearchCustomConversions());

  return entityMapper;
}

现在,您必须删除此 Bean,ElasticsearchEntityMapperinterface 已被删除。spring-doc.cadn.net.cn

实体配置

一些用户在实体类上具有自定义 Jackson 注释,例如,为了在 Elasticsearch 中为映射文档定义自定义名称或配置日期转换。 这些不再被考虑在内。 现在,Spring Data Elasticsearch 的@Field注解。 有关详细信息,请参阅映射注释概述spring-doc.cadn.net.cn

从查询对象中删除隐式索引名称

在 3.2.x 中,不同的查询类(如IndexQuerySearchQuery具有采用索引名称或它们所作的索引名称的属性。如果未设置这些值,则检查传入的实体以检索在@Document注解。
在 4.0.x 中,索引名称现在必须在
IndexCoordinates.通过分离这一点,现在可以对不同的索引使用一个 query 对象。spring-doc.cadn.net.cn

例如以下代码:spring-doc.cadn.net.cn

IndexQuery indexQuery = new IndexQueryBuilder()
  .withId(person.getId().toString())
  .withObject(person)
  .build();

String documentId = elasticsearchOperations.index(indexQuery);

必须更改为:spring-doc.cadn.net.cn

IndexCoordinates indexCoordinates = elasticsearchOperations.getIndexCoordinatesFor(person.getClass());

IndexQuery indexQuery = new IndexQueryBuilder()
  .withId(person.getId().toString())
  .withObject(person)
  .build();

String documentId = elasticsearchOperations.index(indexQuery, indexCoordinates);

为了更轻松地使用实体并使用 Entitie 的@Document注解中,添加了新方法,例如DocumentOperations.save(T entity);spring-doc.cadn.net.cn

新的 Operations 界面

在版本 3.2 中,有ElasticsearchOperations接口,该接口定义了ElasticsearchTemplate类。在版本 4 中,这些函数被拆分为不同的接口,使这些接口与 Elasticsearch API 保持一致:spring-doc.cadn.net.cn

ElasticsearchOperations现在扩展DocumentOperationsSearchOperations并让方法访问IndexOperations实例。spring-doc.cadn.net.cn

来自ElasticsearchOperations接口,现在已移至IndexOperationsinterface 仍然可用,但它们被标记为 deprecated ,并且具有委托给新 implementation的默认实现:
/**
 * 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();
}

弃用

方法和类

许多函数和类已被弃用。这些函数仍然有效,但 Javadocs 显示了它们应该被替换的内容。spring-doc.cadn.net.cn

来自 ElasticsearchOperations 的示例
/*
 * 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);

Elasticsearch 弃用

从版本 7 开始,ElasticsearchTransportClient已弃用,它将在 Elasticsearch 版本 8 中删除。Spring Data Elasticsearch 弃用了ElasticsearchTemplate类,它使用TransportClient在 4.0 版本中。spring-doc.cadn.net.cn

映射类型已从 Elasticsearch 7 中删除,它们仍作为已弃用的值存在于 Spring Data 中@Documentannotation 和IndexCoordinates类,但它们不再在内部使用。spring-doc.cadn.net.cn

清除

  • 如前所述,ElasticsearchEntityMapperinterface 已被删除。spring-doc.cadn.net.cn

  • SearchQueryinterface 已合并到其 base interface 中Query,因此它的出现次数可以替换为Query.spring-doc.cadn.net.cn

  • 方法org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery query, ResultsExtractor<T> resultsExtractor);org.springframework.data.elasticsearch.core.ResultsExtractor接口已被删除。 这些可用于解析来自 Elasticsearch 的结果,以防使用基于 Jackson 的映射器完成的响应映射不够。 从 4.0 版本开始,有新的搜索结果类型可以从 Elasticsearch 响应中返回信息,因此无需公开此低级功能。spring-doc.cadn.net.cn

  • 低级方法startScroll,continueScrollclearScroll已从ElasticsearchOperations接口。 对于低级滚动 API 访问,现在有searchScrollStart,searchScrollContinuesearchScrollClear方法。ElasticsearchRestTemplate类。spring-doc.cadn.net.cn


APP信息