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%。
- 手动调整该项,具体参考官网