|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用Spring Data Elasticsearch 5.5.5! |
从4.4.x升级到5.0.x
本节介绍了从4.4.x到5.0.x版本的重大变更,以及如何用新引入的功能替代被移除的功能。
弃用
自定义痕迹层级记录
通过设置属性进行日志记录logging.level.org.springframework.data.elasticsearch.client.WIRE=trace现已被弃用的 ElasticsearchRest客户端提供了更好的解决方案,可以通过设置 的日志水平来激活示 踪包裹转为“trace”。
org.springframework.data.elasticsearch.client.erhlc包
请参见包变更,该包中的所有类都已被弃用,默认客户端实现基于 Elasticsearch 的新 Java 客户端,详见 New Elasticsearch 客户端
变更
包装变更
所有使用或依赖已弃用 Elasticsearch 的类RestHighLevel客户端已被移入包裹org.springframework.data.elasticsearch.client.erhlc.
通过这一变化,我们现在明确区分了使用旧版 Elasticsearch 库的代码、使用新 Elasticsearch 客户端的代码以及独立于客户端实现的代码。
此外,之前提供的响应式实现也被移至此处,因为该实现包含了从 Elasticsearch 库复制和调整的代码。
如果你正在使用弹性搜索Rest模板直接而非弹性搜索作界面:你还需要调整导入内容。
在与NativeSearchQuery你需要切换到那种原生查询类,可以取一个查询实例来自新的 Elasticsearch 客户端库。
你会在测试代码中找到很多例子。
转换为 Java 17 记录
以下类别已被转换为记录,你可能需要调整取取方法的使用,从getProp()自prop():
-
org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.IndexResponseMetaData(索引响应元数据) -
org.springframework.data.elasticsearch.core.ActiveShardCount -
org.springframework.data.elasticsearch.support.版本 -
org.springframework.data.elasticsearch.support.ScoreDoc -
org.springframework.data.elasticsearch.core.query.ScriptData -
org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm
新的 HttpHeaders 类
直到4.4版本之前,客户端配置使用HttpHeaders来自org.springframework:spring-web项目。
这会引入对该人工物的依赖。
不使用 Spring-Web 的用户会遇到错误,因为找不到该类。
在5.0版本中,我们引入了自己的版本HttpHeaders配置客户端。
所以如果你在客户端配置中使用了标头,你需要替换org.springframework.http.HttpHttpHeaders跟org.springframework.data.elasticsearch.support.HttpHeaders.
提示:你可以通过一个org.springframework.http
.HttpHeaders前往addAll()方法org.springframework.data.elasticsearch.support.HttpHeaders.
新的 Elasticsearch 客户端
Spring Data Elasticsearch 现在使用新的Elasticsearch客户端并且已经不再使用之前的RestHighLevel客户端.
祈使式样式配置
为了配置 Spring Data Elasticsearch 以使用新客户端,需要创建一个从org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration:
@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
配置方式与旧客户端相同,但不再需要创建超过配置豆的部分。 通过这种配置,以下豆子将在春季应用环境中可用:
-
一个
Rest客户端Bean,那是配置好的低级Rest客户端该系统由Elasticsearch客户端使用 -
一
Elasticsearch客户端Bean,这是使用新客户端Rest客户端 -
一
弹性搜索作豆子,可用 elasticsearchOperations 和 elasticsearchTemplate 这两个豆子名称,这使用Elasticsearch客户端
响应式配置
在响应式环境中使用新客户端的唯一区别在于从哪个类派生配置:
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
通过这种配置,以下豆子将在春季应用环境中可用:
-
一个
Rest客户端Bean,那是配置好的低级Rest客户端该系统由Elasticsearch客户端使用 -
一
ReactiveElasticsearchClientBean,这是新的响应式客户端,它使用Rest客户端 -
一
响应式弹性搜索作豆子,可用豆子名称 reactiveElasticSearchOperations 和 reactiveElasticsearchTemplate,使用ReactiveElasticsearchClient
还想用旧客户端吗?
旧的已废弃RestHighLevel客户端仍然可以使用,但你需要在应用中明确添加依赖,因为 Spring Data Elasticsearch 不再自动拉入:
<!-- include the RHLC, specify version explicitly -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.5</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
务必明确指定版本 7.17.6,否则 maven 会解析到 8.5.0,而这个版本并不存在。