对于最新稳定版本,请使用Spring Data Elasticsearch 5.5.5spring-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)已被弃用。 由于现在有多种实现使用不同客户端库,执行方法在不同实现中仍然可用,但接口中没有更多方法,因为不同客户端没有通用的回调接口。spring-doc.cadn.net.cn

变更

废弃类别的移除

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

自4.4版本起,Spring Data Elasticsearch 不再使用运输客户端不再是Elasticsearch(而Elasticsearch自7.0版起已被弃用)。 这意味着org.springframework.data.elasticsearch.core.ElasticsearchTemplate自 Spring Data Elasticsearch 4.0 起被弃用的 class 已被移除。 这是弹性搜索作该接口使用运输客户端. 与弹性搜索的连接必须通过以下命令式弹性搜索Rest模板或反应性ReactiveElasticsearch模板.spring-doc.cadn.net.cn

包装变更

在4.3中,两个类别(弹性搜索聚合弹性搜索聚合)已被迁移到org.springframework.data.elasticsearch.core.clients.elasticsearch7为新 Elasticsearch 客户端的集成做准备的软件包。 他们被调回了org.springframework.data.elasticsearch.corepackage,我们保留了这些类,使用旧的Elasticsearch客户端,位于它们所在的位置。spring-doc.cadn.net.cn

行为改变

ReactiveElasticsearch模板, 无论直接创建还是通过 Spring Boot 创建,配置默认刷新策略为 IMMEDIATE。 这可能导致重度索引时的性能问题,且与Elasticsearch的默认行为不同。 现在默认刷新策略改为无刷新。 当ReactiveElasticsearch模板通过使用Reactive REST Client中描述的配置实现,默认刷新策略已设置为NONE。spring-doc.cadn.net.cn

新的 Elasticsearch 客户端

Elasticsearch 推出了它的新功能Elasticsearch客户端并且已经弃用了之前的RestHighLevel客户端. 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 客户端),请将这些 Burn 从 Spring 应用上下文中移除。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();
	}
}

配置方式与旧客户端相同,但不再需要创建超过配置豆的部分。 通过这种配置,以下豆子将在春季应用环境中可用:spring-doc.cadn.net.cn

  • 一个Rest客户端Bean,那是配置好的低级Rest客户端该系统由Elasticsearch客户端使用spring-doc.cadn.net.cn

  • Elasticsearch客户端Bean,这是使用新客户端Rest客户端spring-doc.cadn.net.cn

  • 弹性搜索作豆子,可用 elasticsearchOperationselasticsearchTemplate 这两个豆子名称,这使用Elasticsearch客户端spring-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();
	}
}

通过这种配置,以下豆子将在春季应用环境中可用:spring-doc.cadn.net.cn

  • 一个Rest客户端Bean,那是配置好的低级Rest客户端该系统由Elasticsearch客户端使用spring-doc.cadn.net.cn

  • ReactiveElasticsearchClientBean,这是新的响应式客户端,它使用Rest客户端spring-doc.cadn.net.cn

  • 响应式弹性搜索作豆子,可用豆子名称 reactiveElasticSearchOperationsreactiveElasticsearchTemplate,使用ReactiveElasticsearchClientspring-doc.cadn.net.cn