该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用Spring Data Elasticsearch 5.5.5spring-doc.cadn.net.cn

从3.2.x升级到4.0.x

本节介绍了从3.2.x到4.0.x版本的破坏性变更,以及如何用新引入的功能替代被移除的功能。spring-doc.cadn.net.cn

拆除二手的Jackson映射仪

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

在4.0.x版本中,唯一可用的基于元模型的转换器,无需显式配置。 如果你有自定义配置,通过提供类似的豆子来启用元模型转换器:spring-doc.cadn.net.cn

@Bean
@Override
public EntityMapper entityMapper() {

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

  return entityMapper;
}

你现在必须把这颗豆子拿出来,ElasticsearchEntityMapper界面已被移除。spring-doc.cadn.net.cn

实体配置

一些用户在实体类上自定义了 Jackson 注释,例如用于在 Elasticsearch 中为映射文档定义自定义名称或配置日期转换。 这些因素现在已经不再被考虑。 所需的功能现在由 Spring Data Elasticsearch 提供@Field注解。 详情请参见映射注释概述spring-doc.cadn.net.cn

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

在3.2.x中,不同的查询类比如索引查询SearchQuery有些物业采用了他们运营的索引名称或索引名称。如果这些未被设置,传入实体会被检查以获取在@Document注解。
在4.0.x中,索引名称必须在一个类型的额外参数中提供
索引坐标.通过分离,现在可以用一个查询对象对应不同的索引。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);

以便更容易地处理实体,并使用包含在企业中的索引名称@Document注释,新增了如下方法。DocumentOperations.save(T entity);spring-doc.cadn.net.cn

新的作接口

在3.2版本中,有弹性搜索作定义了所有方法的接口弹性搜索模板类。在版本4中,函数被拆分为不同的接口,使这些接口与Elasticsearch API保持一致:spring-doc.cadn.net.cn

弹性搜索作现今延伸文档作搜索作并且有方法能够访问索引作实例。spring-doc.cadn.net.cn

所有来自弹性搜索作3.2版本中的接口,现已迁移至索引作接口仍然可用,它们被标记为弃用,并有默认实现委派给新实现:
/**
 * 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);

弹性搜索弃用

自版本7起,Elasticsearch运输客户端已被弃用,Elasticsearch 8版本将移除。Spring Data Elasticsearch 弃用了弹性搜索模板该类使用运输客户端在4.0版本中。spring-doc.cadn.net.cn

映射类型已从 Elasticsearch 7 中移除,它们仍作为 Spring Data 中的弃用值存在@Document注释和索引坐标但它们现在内部已经不再使用了。spring-doc.cadn.net.cn

清除

  • 如前所述,ElasticsearchEntityMapper界面已被移除。spring-doc.cadn.net.cn

  • SearchQuery界面已合并到其基础界面中查询,因此其发生次数可以直接替换为查询.spring-doc.cadn.net.cn

  • 方法org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery查询,ResultsExtractor<T>resultsExtractor);以及org.springframework.data.elasticsearch.core.ResultsExtractor接口已被移除。 这些数据可用于解析Elasticsearch结果,找出使用Jackson映射器所做的反应映射不足的情况。 自4.0版本起,新增了搜索结果类型以返回Elasticsearch响应中的信息,因此无需暴露这一底层功能。spring-doc.cadn.net.cn

  • 低层次方法开始滚动,继续滚动清卷已被移除弹性搜索作接口。 对于底层滚动 API 访问,现在有搜索滚动开始,搜索滚动继续搜索滚动清除方法弹性搜索Rest模板类。spring-doc.cadn.net.cn