提问者:小点点

Elasticsearch noop更新响应不可反序列化


由于不满足条件,我的脚本更新会生成以下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)是让它工作的唯一方法?


共1个答案

匿名用户

在这个github问题中报告了Noop的更新响应和真正更新的文档之间的不一致。这已经通过Elasticsearch 7.4.0版本中发布的PR得到了解决,正如该版本的发行说明中确认的那样。

话虽如此,我认为最干净的解决方案是将Elasticsearch(考虑到v.7.2.0已经超过2年了)更新到一个版本

此外,我不认为版本8中的REST客户端可以与Elasticsearch 7. x一起使用,更不用说版本7.2了。Elasticsearch服务器兼容性策略明确指出客户端是向前兼容的。但是你试图以向后兼容的方式使用它。