此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.5.2spring-doc.cadn.net.cn

从 4.3.x 升级到 4.4.x

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

弃用

org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations

方法<T> Publisher<T> execute(ClientCallback<Publisher<T>> callback)已被弃用。 由于现在有多个实现使用不同的客户端库,execute方法在不同的实现中仍然可用,但接口中没有更多的方法,因为不同的客户端没有通用的回调接口。spring-doc.cadn.net.cn

重大变更

删除已弃用的类

org.springframework.data.elasticsearch.core.ElasticsearchTemplate已被删除

从版本 4.4 开始,Spring Data Elasticsearch 不使用TransportClient不再来自 Elasticsearch(它本身自 Elasticsearch 7.0 以来已被弃用)。 这意味着org.springframework.data.elasticsearch.core.ElasticsearchTemplate自 Spring Data Elasticsearch 4.0 以来已弃用的类。 这是ElasticsearchOperations使用TransportClient. 必须使用命令式ElasticsearchRestTemplate或反应性ReactiveElasticsearchTemplate.spring-doc.cadn.net.cn

包更改

在 4.3 中,两个类 (ElasticsearchAggregationsElasticsearchAggregation) 已移至org.springframework.data.elasticsearch.core.clients.elasticsearch7包,为集成新的 Elasticsearch 客户端做准备。 被移回org.springframework.data.elasticsearch.corepackage 中,因为我们保留类使用旧的 Elasticsearch 客户端。spring-doc.cadn.net.cn

行为改变

ReactiveElasticsearchTemplate,当直接创建或通过 Spring Boot 配置创建时,默认刷新策略为 IMMEDIATE。 这可能会导致大量索引的性能问题,并且与 Elasticsearch 的默认行为不同。 这已更改为现在默认刷新策略为 NONE。 当ReactiveElasticsearchTemplate通过使用响应式 REST 客户端中所述的配置提供,默认刷新策略已设置为 NONE。spring-doc.cadn.net.cn

新的 Elasticsearch 客户端

Elasticsearch 推出了新的ElasticsearchClient并弃用了以前的RestHighLevelClient. Spring Data Elasticsearch 4.4 仍然使用旧客户端作为默认客户端,原因如下:spring-doc.cadn.net.cn

  • 新客户端强制应用程序使用jakarta.json.spi.JsonProvider包,而 Spring Boot 将坚持javax.json.spi.JsonProvider直到版本 3。因此,在 Spring Data Elasticsearch 中切换默认实现只能随 Spring Data Elasticsearch 5(Spring Data 3、Spring 6)一起提供。spring-doc.cadn.net.cn

  • Elasticsearch 客户端中仍有一些错误需要解决spring-doc.cadn.net.cn

  • 由于资源有限,在 Spring Data Elasticsearch 中使用新客户端的实现尚未完成 - 请记住,Spring Data Elasticsearch 是一个社区驱动的项目,它来自公共贡献。spring-doc.cadn.net.cn

如何使用新客户端

使用新客户端的实现不完整,某些作会抛出java.lang.UnsupportedOperationException或者可能会抛出 NPE(例如,当 Elasticsearch 无法解析来自服务器的响应时,有时仍然会发生这种情况)
使用新客户端测试实现,但不要在生产代码中使用它!

为了尝试使用新客户端,需要执行以下步骤:spring-doc.cadn.net.cn

确保不配置现有的默认客户端

如果使用 Spring Boot,请从自动配置中排除 Spring Data Elasticsearchspring-doc.cadn.net.cn

@SpringBootApplication(exclude = ElasticsearchDataAutoConfiguration.class)
public class SpringdataElasticTestApplication {
	// ...
}

从应用程序配置中删除与 Spring Data Elasticsearch 相关的属性。 如果 Spring Data Elasticsearch 是使用编程配置配置的(请参阅 Elasticsearch 客户端),请从 Spring 应用程序上下文中删除这些 bean。spring-doc.cadn.net.cn

添加依赖项

新 Elasticsearch 客户端的依赖项在 Spring Data Elasticsearch 中仍然是可选的,因此需要显式添加它们:spring-doc.cadn.net.cn

<dependencies>
    <dependency>
        <groupId>co.elastic.clients</groupId>
        <artifactId>elasticsearch-java</artifactId>
        <version>7.17.3</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-client</artifactId> <!-- is Apache 2-->
        <version>7.17.3</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

使用 Spring Boot 时,需要在pom.xml中设置以下属性。spring-doc.cadn.net.cn

<properties>
    <jakarta-json.version>2.0.1</jakarta-json.version>
</properties>

新的配置类

命令式风格

为了配置 Spring Data Elasticsearch 以使用新客户端,有必要创建一个派生自org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration:spring-doc.cadn.net.cn

@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder() //
			.connectedTo("localhost:9200") //
			.build();
	}
}

配置的完成方式与旧客户机相同,但不再需要创建配置 Bean 以外的更多内容。 使用此配置,以下 bean 将在 Spring 应用程序上下文中可用:spring-doc.cadn.net.cn

  • 一个RestClientbean,即配置的低级别RestClient由 Elasticsearch 客户端使用的spring-doc.cadn.net.cn

  • ElasticsearchClientbean,这是使用RestClientspring-doc.cadn.net.cn

  • ElasticsearchOperationsbean,与 bean 名称 elasticsearchOperationselasticsearchTemplate 一起使用,这使用ElasticsearchClientspring-doc.cadn.net.cn

响应式风格

要在响应式环境中使用新客户端,唯一的区别是从中派生配置的类:spring-doc.cadn.net.cn

@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder() //
			.connectedTo("localhost:9200") //
			.build();
	}
}

使用此配置,以下 bean 将在 Spring 应用程序上下文中可用:spring-doc.cadn.net.cn

  • 一个RestClientbean,即配置的低级别RestClient由 Elasticsearch 客户端使用的spring-doc.cadn.net.cn

  • ReactiveElasticsearchClientbean,这是使用RestClientspring-doc.cadn.net.cn

  • ReactiveElasticsearchOperationsbean,与 bean 名称 reactiveElasticsearchOperationsreactiveElasticsearchTemplate 一起使用,这使用ReactiveElasticsearchClientspring-doc.cadn.net.cn