2017-04-20 4 views
1

Ich habe ein Problem mit in elastcicSearch Gruppierungsoperation zu tun.Gruppierung in Elasticsearch

Eigentlich habe ich drei Felder in meinem Dokument. das heißt, wie unter:

Id Type Year 

Jetzt möchte ich die Gruppierung auf Exception und Jahr zu tun und zählen es in „ResultCount“.

versuchte ich dies aber es funktioniert nicht:

.Aggregations(a => a 
      .ValueCount("ResultCount", c => c 
       .Field(p => p.Id) 
       .Field(p=> p.Year) 
      )) 
      .Aggregations(a => a 
       .Terms("Type", st => st 
        .Field(o => o.Type) 
        .Size(10))).Size(5) 
      .Aggregations(aa => aa 
        .Max("Year", m => m 
         .Field(o => o.Year) 
        )) 
      ); 

Bitte geben so schnell wie möglich eine Lösung für dieses Problem. Danke.

+0

Was bekommen Sie, in Ausnahmefällen? – user3775217

+0

Eine Ausnahme ist von mir gelöst, aber, Eigentlich habe ich keine Ausgabe bekommen und ich habe auch keine Ahnung, wie diese Daten angezeigt oder Daten angezeigt werden. –

+0

Value Count-Aggregation funktioniert für ein einzelnes Feld. Wenn Sie sich auf eine Kombination von Feldern verlassen müssen, können Sie entweder Sub-Aggregationsbegriffe verwenden oder ein Skript verwenden, um einen zusammengesetzten Schlüssel für die Wertanzahl zu erstellen. –

Antwort

0

Hier werde ich versuchen zu helfen. Es gibt keine Gruppierung in elastischen Termen und Unteraggregationen. Wenn Sie die Anzahl der Fehlertypen, die von Jahr mögen, können Sie es wie so tun:

var response = db.Search<Error>(s => 
       s.Size(0) 
       .Aggregations(aggs1 => aggs1.Terms("level1", 
         l1 =>l1.Field(f => f.Type) 
           .Aggregations(aggs2 => aggs2.Terms("leve2", t=> t.Field(f=>f.Year)))))); 

      foreach (var l1 in response.Aggs.Terms("level1").Buckets) 
      { 
       foreach (var l2 in l1.Terms("leve2").Buckets) 
       { 
        Console.WriteLine("Type:{0}, Year:{1}, Count:{2}", l1.Key, l2.Key, l2.DocCount); 
       } 
      } 

Aber bedenken Sie, dass dies nur, wie Sie arbeitet bis auf ein nicht-analysiert oder Keyword-Felder, wenn Sie Begriffe für Daten wollen Sie können etwas wie date_histogram aggregation verwenden. Wenn Sie Indexabbildung wie diese

{ 
     "properties": { 
      "type": { 
       "type": "keyword" 
      }, 
      "year": { 
       "type": "long" 
      } 
     } 
    } 

sieht Kürze erhalten Sie die Anzahl der Elemente pro Fehlertyp pro Jahr erhalten Sie andere Arten von Aggregationen tun können, als auch in der verschachtelten Aggregation HINWEIS: Die Begriffe Aggregation angenähert wird so Seien Sie nicht überrascht, wenn Sie keine genauen Werte erhalten.