我可以使用旧的 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?
我在上面的线程中发现了一些讨论。这是我的总结。
- 使用模板的操作:
ElasticsearchTemplate 实现了 ElasticSearchOperation。它使用 TransportClient(在 ES 7 中已弃用,在 ES8 中已被删除)
ElasticsearchRestTemplate 实现了 ElasticSearchOperation。它使用高级客户端(在 ES 7.16.0 中已弃用。将来会被删除。@Deprecated(since = "7.16.0", forRemoval = true) )
ReactiveElasticsearchTemplate 实现 ReactiveElasticsearchOperations。它使用 Reactive 客户端。
- 存储库
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 安全修复。
目前我们正在使用 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?
我在上面的线程中发现了一些讨论。这是我的总结。
- 使用模板的操作:
ElasticsearchTemplate 实现了 ElasticSearchOperation。它使用 TransportClient(在 ES 7 中已弃用,在 ES8 中已被删除)
ElasticsearchRestTemplate 实现了 ElasticSearchOperation。它使用高级客户端(在 ES 7.16.0 中已弃用。将来会被删除。@Deprecated(since = "7.16.0", forRemoval = true) )
ReactiveElasticsearchTemplate 实现 ReactiveElasticsearchOperations。它使用 Reactive 客户端。
- 存储库
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 安全修复。