2016-05-12 16 views
0

Ich habe einige Dokumente wie jene (Proben ist ein verschachteltes Objekt im _mapping):Elasticsearch: Aggregationen an verschachtelten Objekten

"_source": { 
    "samples": [ 
     { 
     "name": "A", 
     "d": 0.1 
     }, 
     { 
     "name": "B", 
     "d": 0.2 
     }, 
     ... A THOUSAND SAMPLES 
     { 
     "name": "N", 
     "d": 197 
     } 
    ], 
    "Date": "2015-10-01T01:06:59+0000", 
    "fwot": "ENGINE1" 
} 

und

"_source": { 
    "samples": [ 
     { 
     "name": "A", 
     "d": 0.2 
     }, 
     { 
     "name": "C", 
     "d": 10032 
     }, 
     ... A THOUSAND SAMPLES NOT NECESSARILY THE SAME FOR ALL THE DOCUMENTS 
     { 
     "name": "N", 
     "d": 292 
     } 
    ], 
    "Date": "2015-10-01T01:07:59+0000", 
    "fwot": "ENGINE1" 
} 

und ich möchte Aggregationen Statistiken auf N machen um Histogramme nach Eimern der Probe A

zu machen Ich beginne mit einem Filter auf den Dokumenten, um die relevanten Dokumente

zu erhalten
 { 
      "nested": { 
      "path": "samples", 
      "query": { 
       "bool": { 
       "should": [ 
        { "match": { "samples.name": "A" }}, 
        { "match": { "samples.name": "N"}} 
       ] 
      }}} 
     } 

aber jetzt, was könnte der Aggregationsteil sein?

"aggs": { 
    "samples": { 
     "nested": { 
      "path": "samples" 
     }, 
     "aggs": { 
      "n_stats_by_a": { 
       "histogram": { 
       // ONLY ON SAMPLES WHERE name='A' 
       "field": "samples.d", 
       "interval": 0.1 
       } 
       //DO A METRICS ON samples.d ONLY ON SAMPLES WHERE name='N' 
      } 
     } 
    } 
} 

Ich möchte so etwas wie Ausgang

"aggregations": { 
    "samples": { 
    "doc_count": 57716, 
    "n_stats_by_a": { 
     "doc_count": 177, 
     "agg_histogram": { 
      "buckets": [ 
       { 
       "key": "A_0.0_TO_0.1", 
       "avg_N": 182.332 //average of N when A between 0 and 0.1 
       }, 
       { 
       "key": "A_0.1_TO_0.2", 
       "avg_N": 198.332 //average of N when A between 0.1 and 0.2 
       } 
       ... 
      ] 
     } 
    } 
    } 

}

Antwort

0

Try this:

{ 
"size": 0, 
"aggs": { 
    "samples": { 
    "nested": { 
     "path": "samples" 
    }, 
    "aggs": { 
     "n_stats_by_a": { 
      "filter": { 
       "term": { 
       "samples.name": "A" 
       } 
      }, 
      "aggs": { 
       "agg_histogram": { 
       "histogram": { 
        "field": "samples.d", 
        "interval": 0.1 
       }, 
      "aggs" : { 
      "avg_value" : { "avg" : {"field" : "samples.d"} } 
       } 
       } 
      } 
     }, 
     "n_stats_by_d": { 
      "filter": { 
       "term": { 
       "samples.name": "N" 
       } 
      }, 
      "aggs": { 
       "agg_histogram": { 
       "histogram": { 
        "field": "samples.d", 
        "interval": 0.1 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
+0

Dieses 2 Aggregationen mit Eimern 'n_stats_by_d' führen würde und' n_stats_by_a'. Jetzt weiß ich nicht, wie man den Durchschnittswert von 'N' in jedem Eimer von' n_stats_by_a' erhält –

+0

Bitte spezifizieren Sie die Beispielausgabe ?? – Richa

+0

Bearbeitete meine Antwort. Hoffe, das hilft .. – Richa

Verwandte Themen