2017-04-20 3 views
12

Ich verwende ElasticSearch v5. Ich versuche etwas Ähnliches zu tun, das in Elasticsearch analytics percent beschrieben ist, wo ich eine Aggregation von Termen habe und ich einen Prozentsatz berechnen möchte, der ein Wert von jedem Bucket über die Summe aller Buckets ist. Das ist mein Wunsch:ElasticSearch berechnen Prozentsatz für jeden Bucket von insgesamt

{ 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "periods": { 
     "terms": { 
     "field": "periods", 
     "size": 3 
     }, 
     "aggs": { 
     "balance": { 
      "sum": { 
      "field": "balance" 
      } 
     } 
     } 
    }, 
    "total_balance": { 
     "sum_bucket": { 
      "buckets_path": "periods>balance" 
     } 
    } 
    } 

}

Das Ergebnis, das ich diese wieder wie folgt aus:

{ 
    "aggregations": { 
    "periods": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 1018940846, 
     "buckets": [ 
     { 
      "key": 1177977600000, 
      "doc_count": 11615418, 
      "balance": { 
      "value": 2492032741768.1616 
     } 
     }, 
     { 
      "key": 1185926400000, 
      "doc_count": 11592425, 
      "balance": { 
      "value": 2575365325406.6533 
     } 
     }, 
     { 
      "key": 1175385600000, 
      "doc_count": 11477402, 
      "balance": { 
      "value": 2456256695380.8306 
      } 
     } 
     ] 
    }, 
    "total_balance": { 
     "value": 7523654762555.645 
    } 
    } 
} 

Wie kann ich "Balance"/"total_balance" für jedes Element in der Berechnung von ElasticSearch? Ich habe die Bucket-Skript-Aggregation auf Bucket-Ebene (Perioden) versucht, aber ich kann meinen Buckets-Pfad nicht auf total_balance setzen. Dieser Beitrag https://discuss.elastic.co/t/combining-two-aggregations-to-get-term-percentage/22201 spricht über die Verwendung signifikanter Begriffe Aggregation, aber ich brauche Berechnung der Verwendung bestimmter Felder, nicht doc_count. Ich weiß, dass ich dies als eine einfache Berechnung auf der Client-Seite tun kann, aber ich möchte das alles möglichst in ElasticSearch tun.

+0

Können Sie zu Ihrer Frage hinzufügen: Ihre Quelldaten, die Sie in elasticsearch indexieren und manuell errechnete Ergebnisse, die Sie erreichen möchten? – paweloque

Antwort

1

Nein, das geht nicht. Wenn ich diesen Beitrag schreibe, sind wir in Version 6.1.

Nach https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html#buckets-path-syntax, gibt es nur zwei Haupttypen von Aggregations-Pipelines: Eltern und Geschwister.

Also, um die total_balance Aggregation aus den Zeiträumen Eimer beziehen, sollten wir in der Lage sein, eine "Onkel" Aggregation aus dem buckets_path Attribut, das nicht möglich ist, verweisen.

Verwandte Themen