JestClient调用ElasticSearch报错One or more of the items in the Bulk request failed, check BulkResult.getItems()

出现场景

使用JestClient调用ElasticSearch报错One or more of the items in the Bulk request failed, check BulkResult.getItems();使用

Bulk bulk = new Bulk.Builder().defaultIndex(getIndex0(indexPrefix, objectCode, languageCode)).defaultType(getType()).refresh(refresh).addAction(actions).build();

方式对ElasticSearch数据进行批量处理;

根本原因

查看了一下Bulk的源码,

if (this.isHttpSuccessful(statusCode)) {
if (jsonMap.has("errors") && jsonMap.get("errors").getAsBoolean()) {
result.setSucceeded(false);
result.setErrorMessage("One or more of the items in the Bulk request failed, check BulkResult.getItems() for more information.");
log.debug("Bulk operation failed due to one or more failed actions within the Bulk request");
} else {
result.setSucceeded(true);
log.debug("Bulk operation was successfull");
}
} else {
result.setSucceeded(false);
if (result.getErrorMessage() == null) {
result.setErrorMessage(statusCode + " " + (reasonPhrase == null ? "null" : reasonPhrase));
}

log.debug("Bulk operation failed with an HTTP error");
}

而返回的BulkResult有getFailedItems()方法,可以获取到具体的错误信息。所以在项目中添加该方法,输出具体错误信息的日志。发现了ElasticSearch的具体报错信息如下,

[{"error":"{\"type\":\"cluster_block_exception\",\"reason\":\"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];\"}","errorReason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];","errorType":"cluster_block_exception","id":"1260920660750807040~1900-01-01","index":"es_index","operation":"index","status":403,"type":"_doc"}]

该index被设置为只允许只读/删除的权限,查看该index的setting配置,read_only_allow_delete为true。

GET es_index/_settings
#结果如下
{
  "z1" : {
    "settings" : {
      "index" : {
        "number_of_shards" : "5",
        "blocks" : {
          "read_only_allow_delete" : "true"
        },
        "provided_name" : "es_index",
        "creation_date" : "1556204559161",
        "number_of_replicas" : "1",
        "uuid" : "3PEevS9xSm-r3tw54p0o9w",
        "version" : {
          "created" : "6050499"
        }
      }
    }
  }
}

解决方案

PUT es_index/_settings

{
    "index.blocks.read_only_allow_delete": "false"
}
  • 清理磁盘,使占用率低于 85%。
  • 手动调整该项,具体参考官网

参考

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注