我们正在AWS上运行elasticsearch,该AWS当前支持最新版本的Elasticsearch 6.3。
我们有一个业务案例,需要每天更新索引中的所有文档并删除一个嵌套对象。 有Elasticsearch的{{3}}可以解决我们的目的。
但是在我们的Java应用程序中,我们使用的是Java高级Rest客户。 Update by query API支持查询api更新。 现在,如果将其余客户端升级到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服务中将client和elasticsearch版本升级到6.5并仍然使用elasticsearch 6.3吗? 我尝试了一下,它就可以了,但是只是想更彻底,因为我们不想破坏我们的数据。
编辑: rest client version 6.5中也提供了“按查询更新”功能,但是此api使用的旧版Transportclient应该很快就会弃用。
答案 0 :(得分:0)
运行混合版本集群是我们仅在升级过程中建议的方式,而不是作为现状。群集中具有较旧版本的节点或客户端会限制对较新功能的支持,因为较旧的客户端根本不知道如何以较新的二进制格式写入或读取请求。
这也应该反过来适用(旧ES版本的新客户端)
此外,在Recommendation中,@ Samuel Kok指出:
一旦集群中的所有节点都已升级到新的主要版本,客户端应始终最后更新。
答案 1 :(得分:0)
基于弹性搜索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。
“通过查询更新”在6.3中也可用,因此我不明白为什么需要使用Java Rest Client 6.5版。除非我不知道6.5中发布的“按查询更新的API”中有一些新功能。