2017-01-13 6 views
0

オブジェクト初期化子構文を使用して、いくつかのネストされていない集計を持つSearchRequestオブジェクトを初期化する方法を探しています。elasticsearch nest:オブジェクト初期化子構文を使用して複数集計でSearchRequestを作成します。

要求がElasticClient.Searchへのparam(として指定された場合)ラムダ式のヘルパーで、怒鳴るように書かれます:逆説的である

var response = Client.Search<person>(s => s.Aggregations(a => 
      a.Terms("bucketAge", t => t.Field("age").Size(50)) 
      .Terms("bucketCity", t => t.Field("city").Size(50)))); 

何私は私がどのように入れ子になったとのAGGを書き込むことが発見されました

var searchRequest = new SearchRequest<person> 
{ 
     Size = 0, 
     Aggregations = 
     { 
       new TermsAggregation("bucketAge") 
       { 
        Field = "age", 
        Size = 50 
       }, 
       new TermsAggregation("bucketcity") 
       { 
        Field = "city", 
        Size = 50 
       } 
     } 
}; 
:AGG

var searchRequest = new SearchRequest<person> 
     { 
      Size = 0, 
      Aggregations = 
      new TermsAggregation("bucketAge") 
      { 
       Field = "age", 
       Size = 50, 
       Aggregations = new TermsAggregation("bucketcity") 
       { 
        Field = "city", 
        Size = 50 
      } 
      } 
     }; 

しかし、私はそのようなもので、同じレベルの2 aggsでSearchRequestを初期化に失敗します

どうすればいいですか?オブジェクト初期化子の構文で

答えて

1

、あなたは&&

var searchRequest = new SearchRequest<person> 
{ 
    Size = 0, 
    Aggregations = 
     new TermsAggregation("bucketAge") 
     { 
      Field = "age", 
      Size = 50 
     } && 
     new TermsAggregation("bucketcity") 
     { 
      Field = "city", 
      Size = 50 
     } 

}; 

var searchResponse = client.Search<person>(searchRequest); 

あなたは

var aggregations = new Dictionary<string, AggregationContainer> 
{ 
    { "bucketAge", new TermsAggregation("bucketAge") 
     { 
      Field = "age", 
      Size = 50 
     } 
    }, 
    { "bucketcity", new TermsAggregation("bucketcity") 
     { 
      Field = "city", 
      Size = 50 
     } 
    }, 
}; 

var searchRequest = new SearchRequest<person> 
{ 
    Size = 0, 
    Aggregations = new AggregationDictionary(aggregations) 
}; 

var searchResponse = client.Search<person>(searchRequest); 

注意を好む場合は、集約辞書を使用して長いったらしい方法を使用することができるとの集計を組み合わせることができ、その内のキーDictionary<string, AggregationContainer>は要求内の集約の名前になります。

+0

本当にありがとうございます!あなたの答えはireallyよく説明され、フルです。巣のすべての側面が説明されているリンクが存在していますか?私は&&が表示されている例を見ることができるただ1ページを見つけましたが、私は正しい言葉で検索しませんでした。 – lambdaDev

+0

@ lambdaDevあなたはhttps://www.elastic.co/guide/en/elasticsearch/client/net-api/5.x/writing-aggregations.htmlを見ましたか? –

関連する問題