|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用Spring Data Elasticsearch 5.5.5! |
从3.2.x升级到4.0.x
本节介绍了从3.2.x到4.0.x版本的破坏性变更,以及如何用新引入的功能替代被移除的功能。
拆除二手的Jackson映射仪
4.0.x 版本的一项变化是 Spring Data Elasticsearch 不再使用 Jackson Mapper 将实体映射到 Elasticsearch 所需的 JSON 表示(参见 Elasticsearch 对象映射)。在 3.2.x 版本中,Jackson Mapper 成为默认使用。可以切换到基于元模型的转换器(名为ElasticsearchEntityMapper)通过显式配置(元模型对象映射)实现。
在4.0.x版本中,唯一可用的基于元模型的转换器,无需显式配置。 如果你有自定义配置,通过提供类似的豆子来启用元模型转换器:
@Bean
@Override
public EntityMapper entityMapper() {
ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
elasticsearchMappingContext(), new DefaultConversionService()
);
entityMapper.setConversions(elasticsearchCustomConversions());
return entityMapper;
}
你现在必须把这颗豆子拿出来,ElasticsearchEntityMapper界面已被移除。
一些用户在实体类上自定义了 Jackson 注释,例如用于在 Elasticsearch 中为映射文档定义自定义名称或配置日期转换。
这些因素现在已经不再被考虑。
所需的功能现在由 Spring Data Elasticsearch 提供@Field注解。
详情请参见映射注释概述。
从查询对象中移除隐式索引名称
在3.2.x中,不同的查询类比如索引查询或SearchQuery有些物业采用了他们运营的索引名称或索引名称。如果这些未被设置,传入实体会被检查以获取在@Document注解。
在4.0.x中,索引名称必须在一个类型的额外参数中提供索引坐标.通过分离,现在可以用一个查询对象对应不同的索引。
例如,以下代码:
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保持一致:
-
文档作这些功能是与文档相关的,比如保存或删除 -
搜索作包含在Elasticsearch中搜索的函数 -
索引作定义作索引的函数,比如索引创建或映射创建。
弹性搜索作现今延伸文档作和搜索作并且有方法能够访问索引作实例。
所有来自弹性搜索作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 显示了应该替换的部分。
/*
* 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界面已合并到其基础界面中查询,因此其发生次数可以直接替换为查询. -
方法
org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery查询,ResultsExtractor<T>resultsExtractor);以及org.springframework.data.elasticsearch.core.ResultsExtractor接口已被移除。 这些数据可用于解析Elasticsearch结果,找出使用Jackson映射器所做的反应映射不足的情况。 自4.0版本起,新增了搜索结果类型以返回Elasticsearch响应中的信息,因此无需暴露这一底层功能。 -
低层次方法
开始滚动,继续滚动和清卷已被移除弹性搜索作接口。 对于底层滚动 API 访问,现在有搜索滚动开始,搜索滚动继续和搜索滚动清除方法弹性搜索Rest模板类。