我在Elasticsearch中有以下结构的文档:
"mappings": {
"document": {
"properties": {
"@timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"@version": {
"type": "string"
},
"id_secuencia": {
"type": "long"
},
"event": {
"properties": {
"elapsedTime": {
"type": "double"
},
"requestTime": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"error": {
"properties": {
"errorCode": {
"type": "string",
"index": "not_analyzed"
},
"failureDetail": {
"type": "string"
},
"fault": {
"type": "string"
}
}
},
"file": {
"type": "string",
"index": "not_analyzed"
},
"messageId": {
"type": "string"
},
"request": {
"properties": {
"body": {
"type": "string"
},
"header": {
"type": "string"
}
}
},
"responseTime": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"service": {
"properties": {
"operation": {
"type": "string",
"index": "not_analyzed"
},
"project": {
"type": "string",
"index": "not_analyzed"
},
"proxy": {
"type": "string",
"index": "not_analyzed"
},
"version": {
"type": "string",
"index": "not_analyzed"
}
}
},
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"user": {
"type": "string",
"index": "not_analyzed"
}
}
},
"type": {
"type": "string"
}
}
}
}
我需要根据以下标准检索字段“ event.file ”(在Kibana数据表中显示)的唯一值列表:
“event.file”字段有多个文档具有相同的值
“event.file”值的所有出现都导致错误(所有文档中都存在字段“ event.error.errorCode ”)
为此目的,我一直在测试的方法是使用术语聚合,因此我可以获得包含单个文件名的所有文档的存储桶列表。我无法实现的是根据先前的标准在聚合中丢弃一些结果桶(如果其中至少有一个没有错误,则应该丢弃该桶)。
这是正确的方法还是有更好/更简单的方法来获得这种结果?
非常感谢。
答案 0 :(得分:0)
在尝试了几个查询后,我发现以下方法(请参阅下面的查询)对我的目的有效。我现在看到的问题是显然在Kibana中不可能这样做,因为它不支持管道聚合(参见https://github.com/elastic/kibana/issues/4584)。
{
"query": {
"bool": {
"must": [
{
"filtered": {
"filter": {
"exists": {
"field": "event.file"
}
}
}
}
]
}
},
"size": 0,
"aggs": {
"file-events": {
"terms": {
"field": "event.file",
"size": 0,
"min_doc_count": 2
},
"aggs": {
"files": {
"filter": {
"exists": {
"field": "event.file"
}
},
"aggs": {
"totalFiles": {
"value_count": {
"field": "event.file"
}
}
}
},
"errors": {
"filter": {
"exists": {
"field": "event.error.errorCode"
}
},
"aggs": {
"totalErrors": {
"value_count": {
"field": "event.error.errorCode"
}
}
}
},
"exhausted": {
"bucket_selector": {
"buckets_path": {
"total_files":"files>totalFiles",
"total_errors":"errors>totalErrors"
},
"script": "total_errors == total_files"
}
}
}
}
}
}
同样,如果我错过了某些反馈,我们将不胜感激:)