【问题标题】:Can I use newer version of java high level rest client on an older version of elasticsearch?我可以在旧版本的 elasticsearch 上使用新版本的 java 高级 rest 客户端吗?
【发布时间】:2019-05-02 10:04:41
【问题描述】:

我们在 AWS 上运行 elasticsearch,目前支持 elasticsearch 6.3 作为最新版本。

我们有一个业务案例,我们需要每天更新索引中的所有文档并删除一个嵌套对象。 有elasticsearch的Update by query API可以解决我们的目的。

但是在我们的 Java 应用程序中,我们使用的是 Java 高级别的客户端。 rest client version 6.5 支持通过查询 api 进行更新。 现在如果我们将rest客户端升级到6.5,我们还需要升级pom中的elasticsearch版本。否则它们不兼容。

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>

那么我们可以在我们的java服务中将客户端和elasticsearch版本升级到6.5,并且仍然使用elasticsearch 6.3吗? 我试过了,它可以工作,但只是想彻底,因为我们不希望我们的数据被破坏。

编辑: 通过查询更新也可以在6.3 中使用,但是这个 api 使用的是旧的 Transportclient,它应该很快就会被弃用。

【问题讨论】:

  • 这是来自 ElasticSearch documentation 的推荐。
  • 嗨,最近怎么样? elasticsearch server 6.3 是否与 elasticsearch client 6.5 版本配合得很好?谢谢。

标签: java elasticsearch elasticsearch-java-api


【解决方案1】:

根据Elasticsearch

我们只建议在升级过程中运行混合版本集群,而不是保持现状。在集群中拥有旧版本的节点或客户端会限制对新功能的支持,因为旧客户端根本不知道如何以较新的二进制格式写入或读取请求。

这也应该反过来应用(旧 ES 版本的新客户端)

此外,@Samuel Kok 指出的 Recommendation 指出:

一旦集群中的所有节点都升级到新的主要版本,客户端应该总是最后更新。

【讨论】:

  • 任何适当的文档说明新客户端适用于旧 Elasticsearch 版本?明确说明Elasticsearch guide可能存在不兼容问题。
  • 我的回答实际上正好相反(对于旧版本不使用较新的客户端)
【解决方案2】:

基于弹性搜索Documentation

保证高级客户端能够与任何 Elasticsearch 节点在相同的主要版本或更高版本上运行 相同的次要版本。

6.0 客户端能够与任何 6.x Elasticsearch 节点通信, 而 6.1 客户端肯定能够与 6.1、6.2 和 任何更高的 6.x 版本,但可能存在不兼容问题 例如,与以前的 Elasticsearch 节点版本通信 在 6.1 和 6.0 之间,以防 6.1 客户端支持新的请求正文 6.0 节点不知道的一些 API 的字段。

换句话说,Java Rest Client 永远不应该比 Elasticsearch 节点更新。

对于您的情况,强烈建议您将 Elastic Search 也升级到 6.5,或者将您的 Java Rest Client 降级回 6.3。

Updated By Query 在6.3 中也可用,所以我不明白您为什么需要使用 Java Rest Client 6.5 版。除非在 6.5 中发布的 Update By Query API 中有一些我不知道的新功能。

【讨论】:

  • 查询更新在 6.3 中也可用,但是这个 api 使用的是旧的 Transportclient,它应该很快就会被弃用。想使用更新的高级别的休息客户端。
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多