2016-07-25 5 views
0

Ich habe Dokumente in Elasticsearch mit folgenden Struktur:Unable Ergebnis Eimer in Bezug auf der Aggregation fallen - 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" 
     } 
    } 
    } 
} 

Und ich brauche zum Abrufen eine Liste von eindeutigen Werten für das Feld „event.file“ (um zu zeigen, in einer Kibana Datentabelle) nach folgenden Kriterien:

  • Es ist mehr als ein Dokument mit dem gleichen Wert für das Feld „event.file“

  • Alle
  • die Vorkommen für diesen Wert von „event.file“ haben dazu geführt, Fehler (Feld „event.error.errorCode“ existiert in allen Dokumenten)

Zu diesem Zweck den Ansatz, den ich habe Getestet wurde die Verwendung von Begriffe Aggregation, so kann ich eine Liste von Buckets mit allen Dokumenten für einen einzigen Dateinamen erhalten. Was ich nicht erreichen konnte, ist einige der resultierenden Buckets in der Aggregation gemäß den vorherigen Kriterien zu löschen (wenn mindestens einer von ihnen keinen Fehler hat, sollte der Bucket verworfen werden).

Ist dies der richtige Ansatz oder gibt es einen besseren/einfacheren Weg, diese Art von Ergebnis zu erhalten?

Vielen Dank.

Antwort

0

Nachdem ich mehrere Abfragen ausprobiert habe, fand ich den folgenden Ansatz (siehe Abfrage unten), um für meinen Zweck gültig zu sein. Das Problem, das ich jetzt sehe, ist, dass es anscheinend nicht möglich ist, dies in Kibana zu tun, da es keine Pipeline-Aggregationen unterstützt (siehe 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" 
      } 
     } 
     } 
    } 
    } 
} 

Noch einmal, wenn ich etwas Feedback bin fehlt versteht sich :)

Verwandte Themen