2016-07-25 50 views
0

我有以下結構Elasticsearch文件:無法而言聚集砸結果鬥 - 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

嘗試了幾個查詢後,我發現以下方法(請參見下面的查詢)對我的目的有效。我現在看到的問題顯然是在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" 
      } 
     } 
     } 
    } 
    } 
} 

再次,如果我想的東西反饋將不勝感激:)