我有一个ElasticSearch集群,当前版本为6.3.2,我们还没有准备好对其进行升级(希望很快就会升级!)。根据ES文档,只要我使用的是同一主要版本,我就应该能够使用较新版本的Java客户端:
客户端必须具有与集群中的节点相同的主版本(例如2.x或5.x)。客户端可以连接到具有不同次要版本(例如2.3.x)的群集,但是有可能不支持新功能。理想情况下,客户端应具有与群集相同的版本。
由于各种原因,我的客户端代码当前正在使用REST高级客户端的6.6.2版本。由于客户端和群集都共享6.x的主要版本,因此,只要客户端不尝试使用6.3.2以后的任何功能,我都希望一切正常。如果我误解了以上关于版本兼容性的声明,请告诉我。
不幸的是,当我介绍使用复合聚合时,我发现这些版本不兼容。客户端代码将"missing_bucket": false
条目插入到复合聚合源中。我相信丢失的存储桶功能仅是在Elasticsearch 6.4中添加的,而我的6.3.2集群正在拒绝它并显示错误:
org.elasticsearch.ElasticsearchException: Elasticsearch exception [type=illegal_argument_exception, reason=[date_histogram] unknown field [missing_bucket], parser not found]
这是否违反了上面提到的客户端兼容性策略?解决此问题的最佳方法是什么?在获得计划中的集群的完整升级之前,是否需要将所有客户端代码都改回使用6.3?同时,我还可以考虑其他解决方法吗?