我可以使用旧的 spring-data-elasticsearch 连接到新的 elasticsearch 吗?

can I use old spring-data-elasticsearch to connect to new elasticsearch?

目前我们正在使用 spring-data-elasticsearch 3.2.6 + elasticsearch 6.8。 我们正在转向新的 elasticsearch 7.x。我是否必须将 spring-data-elasticsearch 更新为 4.x?我们只在spring-data-elasticsearch中使用ElasticsearchRepository。而且我们不需要使用elasticsearch中的任何新特性7.x.

如果我们将来要迁移到 elasticsearch 8.x,我需要更新 spring-data-elasticsearch 吗?

更新:

All methods in the `ElasticsearchRepository` are deprecated. What should do I use?

我在上面的线程中发现了一些讨论。这是我的总结。

  1. 使用模板的操作:

ElasticsearchTemplate 实现了 ElasticSearchOperation。它使用 TransportClient(在 ES 7 中已弃用,在 ES8 中已被删除)

ElasticsearchRestTemplate 实现了 ElasticSearchOperation。它使用高级客户端(在 ES 7.16.0 中已弃用。将来会被删除。@Deprecated(since = "7.16.0", forRemoval = true) )

ReactiveElasticsearchTemplate 实现 ReactiveElasticsearchOperations。它使用 Reactive 客户端。

  1. 存储库

ElasticsearchRepository 默认使用 TransportClient。 ElasticsearchRepository 中的所有方法现已弃用。

Reactive Elasticsearch 存储库 建立在 ReactiveElasticsearchOperations 之上。


由于底层的 TransportClient 或 HigLevelRestClient 已被弃用,我可以断定正确的方法是使用 Reactive Client(ReactiveElasticsearchTemplate 或 Reactive Elasticsearch 存储库)吗?

new Elasticsearch 将是 8.

Val 已经在他的评论中将 link 放入兼容性矩阵中。

版本 3.2.6 已经过时(2020 年 3 月 25 日)并且自 2020 年 10 月起不再支持。

您可以尝试的第一件事是查看您的应用程序是否适用于 7 集群 - 虽然我对此表示怀疑,但我无法确切告诉您 API 中发生了什么变化,但是有相当多的一些东西。

你应该做的是将比 Spring Data Elasticsearch 构建时使用的库更新的 Elasticsearch 库放在类路径上,这在大多数情况下会产生问题.

但我还是建议升级您的应用程序并定期保持最新。

关于将来升级到版本 8:可以在您的请求中发送兼容性 header(这可以在 Spring Data Elasticsearch 4 中完成)并且 Elasticsearch 集群应该响应一种与期望版本 7 的客户端兼容的格式。我写了应该,因为它在每种情况下都不符合这一点——我报告了一个现在已修复的案例。但我不会依赖它。

再次提醒,请更新您的应用程序并使其保持最新,这不仅是因为 Spring Data Elasticsearch,还因为这些更新总是包含错误 and/or 安全修复。