由于不满足条件,我的脚本更新会生成以下noop
响应:
/my_idx/_update/my_doc_id
{
"_index": "my_idx",
"_type": "_doc",
"_id": "my_doc_id",
"_version": 4,
"result": "noop",
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
}
}
但是,此响应无法反序列化为UpdateResponse
protected WriteResponseBase(AbstractBuilder<?> builder) {
this.id = ApiTypeHelper.requireNonNull(builder.id, this, "id");
this.index = ApiTypeHelper.requireNonNull(builder.index, this, "index");
this.primaryTerm = ApiTypeHelper.requireNonNull(builder.primaryTerm, this, "primaryTerm");
this.result = ApiTypeHelper.requireNonNull(builder.result, this, "result");
this.seqNo = ApiTypeHelper.requireNonNull(builder.seqNo, this, "seqNo");
this.shards = ApiTypeHelper.requireNonNull(builder.shards, this, "shards");
this.type = builder.type;
this.version = ApiTypeHelper.requireNonNull(builder.version, this, "version");
this.forcedRefresh = builder.forcedRefresh;
}
我的Java客户端的版本是8.4.2
,而服务器实例版本是7.2.0
。我已经做了一些黑客来让这两个版本一起工作。我想知道这些缺失的字段在7.2.0
中是否确实是可选的。不幸的是,我无法检查,因为它们在Github中只有7.15.0
的标签。
是否有任何解决方法,或者捕获结果异常并处理它(希望是因为noop
)是让它工作的唯一方法?
在这个github问题中报告了Noop的更新响应和真正更新的文档之间的不一致。这已经通过Elasticsearch 7.4.0版本中发布的PR得到了解决,正如该版本的发行说明中确认的那样。
话虽如此,我认为最干净的解决方案是将Elasticsearch(考虑到v.7.2.0已经超过2年了)更新到一个版本
此外,我不认为版本8中的REST客户端可以与Elasticsearch 7. x一起使用,更不用说版本7.2了。Elasticsearch服务器兼容性策略明确指出客户端是向前兼容的。但是你试图以向后兼容的方式使用它。