本节介绍从版本 4.4.x 到 5.0.x 的重大更改,以及如何将删除的功能替换为新引入的功能。
弃用
自定义跟踪级别日志记录
通过设置属性进行日志记录现在已弃用,Elasticsearch 提供了一个更好的解决方案,可以通过将包的日志记录级别设置为“trace”来激活。logging.level.org.springframework.data.elasticsearch.client.WIRE=traceRestClienttracer
org.springframework.data.elasticsearch.client.erhlc包
请参阅软件包更改,此软件包中的所有类都已弃用,因为要使用的默认客户端实现是基于 Elasticsearch 的新 Java 客户端的实现,请参阅新 Elasticsearch 客户端
重大变更
软件包更改
所有使用或依赖已弃用的 Elasticsearch 的类都已移至软件包中。
通过这一更改,我们现在清楚地分离了使用旧的已弃用的 Elasticsearch 库的代码、使用新 Elasticsearch 客户端的代码和独立于客户端实现的代码。
此外,到目前为止提供的反应式实现也已移至此处,因为此实现包含从 Elasticsearch 库复制和改编的代码。RestHighLevelClientorg.springframework.data.elasticsearch.client.erhlc
如果您直接使用而不是界面,则还需要调整导入。ElasticsearchRestTemplateElasticsearchOperations
使用该类时,您需要切换到该类,该类可以采用来自新 Elasticsearch 客户端库的实例。
您会在测试代码中找到大量示例。NativeSearchQueryNativeQueryQuery
转换为 Java 17 记录
以下类已转换为 ,您可能需要将 getter 方法的使用从 调整为 :RecordgetProp()prop()
- 
org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.IndexResponseMetaData - 
org.springframework.data.elasticsearch.core.ActiveShardCount - 
org.springframework.data.elasticsearch.support.Version - 
org.springframework.data.elasticsearch.support.ScoreDoc - 
org.springframework.data.elasticsearch.core.query.ScriptData - 
org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm 
新的 HttpHeaders 类
在版本 4.4 之前,客户端配置使用项目中的类。
这引入了对该工件的依赖关系。
不使用spring-web的用户会遇到错误,因为找不到此类。HttpHeadersorg.springframework:spring-web
在 5.0 版中,我们引入了自己的客户端来配置客户端。HttpHeaders
因此,如果在客户端配置中使用标头,则需要替换为 .org.springframework.http.HttpHeadersorg.springframework.data.elasticsearch.support.HttpHeaders
提示:可以将 a 传递给 的方法。org.springframework.http
.HttpHeadersaddAll()org.springframework.data.elasticsearch.support.HttpHeaders
新 Elasticsearch 客户端
Spring Data Elasticsearch 现在使用新的,并且已弃用以前的 .ElasticsearchClientRestHighLevelClient
命令式样式配置
要配置Spring Data Elasticsearch以使用新客户端,必须创建一个配置Bean,该bean派生自:org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration
@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {
	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder() //
			.connectedTo("localhost:9200") //
			.build();
	}
}
配置的完成方式与旧客户机相同,但不再需要创建比配置 Bean 更多的数据。 使用此配置,以下 Bean 将在 Spring 应用程序上下文中可用:
- 
一个 bean,即 Elasticsearch 客户端使用的配置低级别
RestClientRestClient - 
一个 bean,这是使用
ElasticsearchClientRestClient - 
一个 bean,提供 bean 名称 elasticsearchOperations 和 elasticsearchTemplate,它使用
ElasticsearchOperationsElasticsearchClient 
反应式配置
要在响应式环境中使用新客户端,唯一的区别是要从中派生配置的类:
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder() //
			.connectedTo("localhost:9200") //
			.build();
	}
}
使用此配置,以下 Bean 将在 Spring 应用程序上下文中可用:
- 
一个 bean,即 Elasticsearch 客户端使用的配置低级别
RestClientRestClient - 
一个 bean,这是使用
ReactiveElasticsearchClientRestClient - 
一个 bean,提供 bean 名称 reactiveElasticsearchOperations 和 reactiveElasticsearchTemplate,它使用
ReactiveElasticsearchOperationsReactiveElasticsearchClient 
还想使用旧客户端吗?
旧的已弃用的仍然可以使用,但您需要将依赖项显式添加到您的应用程序中,因为 Spring Data Elasticsearch 不再自动拉取它:RestHighLevelClient
<!-- 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,并且不存在。