当前位置: 首页 > 知识库问答 >
问题:

我可以在旧版本的elasticsearch上使用新版本的java高级rest客户端吗?

孙才捷
2023-03-14

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

我们有一个业务案例,需要每天更新索引中的所有文档并删除一个嵌套对象。elasticsearch通过查询API进行了更新,这将解决我们的问题。

但在我们的java应用程序中,我们使用的是java高级rest客户端。rest客户端版本6.5支持按查询更新api。现在,如果我们将resthtml" target="_blank">客户端升级到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,预计很快就会被弃用。

共有2个答案

熊博远
2023-03-14

基于弹性搜索文档

高级客户端保证能够与运行在相同主版本和更大或相等次要版本上的任何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客户端永远不应该比Elasticsearch节点更新。

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

6.3中也提供了“按查询更新”,所以我不明白为什么需要使用Java Rest客户端的6.5版本。除非在6.5版本中发布的更新查询API中有一些新特性,我不知道。

贾建茗
2023-03-14

根据Elasticsearch,

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

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

此外,Samuel Kok在本建议中指出:

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

 类似资料:
  • 我使用的是ES版本6.0.1,并在我的应用程序中集成了版本为6.0.1的Java高级rest客户端。 我目前正在尝试使用弹性搜索的JavaHigh Level Rest客户端API构建这个基于脚本的排序查询: 但我找不到任何关于java客户端基于脚本的排序查询的文档。如果有人能帮助我使用java API实现上述查询,我将不胜感激。

  • 问题内容: 我正在使用python 3.5.1,它带有3.8.11的sqlite版本。我想知道我是否可以在当前的python中使用其他版本的sqlite(例如到目前为止的最新版本)。如果答案是肯定的,那我该怎么做?从这里学习,我尝试了这个,但是它什么也没做: 我在需要全文搜索的django项目中使用sqlite3。因此,我正在阅读本文档,并在某种程度上使我 倾向于 使用最新版本的sqlite3,因

  • 我想下载旧版本的Android SDK:21.0.0,在哪里可以下载? 我目前有最新版本的android SDK,从这里下载。 然而,我想要一个旧版本,完整的旧版本的SDK可以从任何地方下载吗? 我正在尝试使用SDK管理器获取旧版本,但它不起作用。一、 它只给我构建工具等。

  • 问题内容: 这可能是一个愚蠢的问题,但是在运行以Java 1.6 和 1.7 版编译的Java程序和相关库(我使用1.7进行编译,而某些库是使用1.6进行编译)并在1.7 JRE中运行整个程序时,我会遇到任何问题? 问题答案: 您不会遇到任何问题-这就是Java的魔力-它是向后兼容的。您几乎可以在Java 8上运行Java 1中的所有代码。没有理由不能在Java 8 Runtime上运行Java

  • 我有Python 3.6。5和Python 3.7。4.已安装。 给我3.6,而 给我3.7。PyCharm中的运行代码表明它仍在使用3.6。如何更新它以开始使用3.7和/或删除3.6? 我环顾了很多其他论坛,但到目前为止,似乎没有什么与这个具体问题相关。

  • 我正在尝试从ElasticSearch 2过渡到5或6。我想我想直接跳到6.1.1并使用RestHighLevelClient,因为它比低级rest客户端更接近我正在使用的现有传输客户端。 但是,我遇到了一个问题作为集成测试的一部分,我正在创建索引并插入特定数据,因此我知道我的查询是正确的。我似乎无法在High Level客户端中做到这一点。特别是,我希望能够调用: 但是,client.indic