2017-04-20 13 views
1

elastcicSearchでグループ化操作を実行する際に問題があります。弾性検索でグループ化する

実際、私はドキュメントに3つのフィールドを持っています。それは以下の通りです:

私はExceptionTypeとYearをグループ化し、 "ResultCount"で数えたいと思います。

私はこの1つを試してみましたが、それは動作していない:

.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) 
        )) 
      ); 

できるだけ早くこの問題の解決策を教えてください。ありがとうございました。

+0

例外的に何を得ていますか? – user3775217

+0

1つの例外が私によって解決されましたが、 実際には出力が得られませんでした。また、そのデータを表示する方法やデータのデータを見る方法もわかりません。 –

+0

値の集計は1つのフィールドで機能します。フィールドのコンポジットをカウントする必要がある場合は、用語サブアグリゲーションを使用するか、スクリプトを使用してバリューカウントの複合キーを作成します。 –

答えて

0

ここで私は助けようとします。弾力性のある用語とサブアグリゲーションのグループのようなものはありません。あなたは年によってエラータイプのカウントをしたい場合は、そのようにそれを行うことができます。

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); 
       } 
      } 

しかし、あなたは、日付の条件をしたい場合、これが唯一の非分析するか、キーワードフィールドを除いて、あなたのように動作することを念頭に置いておきますあなたはdate_histogram集約のようなものを使うことができます。 あなたのインデックスマッピングが、この

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

のように見える場合は、集計の他のタイプと同様で、ネストされた集約 注を行うことができます あなたは年間エラーの種類ごとの項目数を取得します:用語の集約はとても近似していますあなたが正確な値を得ていない場合、驚かないでください。