2017-02-20 24 views
1

ネストされたアグリゲーションに問題があります。ここで私が集計を定義する方法と私が得るjson同等物を得る:ネストしたアグリゲーションがAggregationContainerと連携していません

var aggregations = new AggregationDictionary(); 

var nestedAgg = new AggregationContainer 
{ 
    Nested = new NestedAggregation("some_name1") 
    { 
    Path = "users", 
    Aggregations = new TermsAggregation("some_name2") 
    { 
     Field = "users.name.keyword", 
     Size = 100, 
     Order = new List<TermsOrder> { new TermsOrder() { Key = "_term", Order = SortOrder.Descending } } 
    } 
}; 

aggregations[aggKey] = nestedAgg; 

searchRequest.Aggregations = aggregations; 

上記はjsonに変換されています。それだけでパスなし集計定義を示しています。直接AggregationDictionaryAggregationContainerを使用して

{ 
    "aggs": { 
    "some_name1": { 
     "nested": { 
      "path": "users" 
      } 
    } 
} 

答えて

0

は少し厄介です。私たちはタイプAggregationContainerの変数にNestedAggregationを割り当てるためにAggregationContainerAggregationBaseから暗黙の変換(集計から派生ベースクラス)を使用するここでは、この

var aggregations = new AggregationDictionary(); 
var aggKey = "some_name1"; 

AggregationContainer nestedAgg = new NestedAggregation("some_name1") 
{ 
    Path = "users", 
    Aggregations = new TermsAggregation("some_name2") 
    { 
     Field = "users.name.keyword", 
     Size = 100, 
     Order = new List<TermsOrder> 
     { 
      new TermsOrder() { Key = "_term", Order = Nest.SortOrder.Descending } 
     } 
    } 
}; 

aggregations[aggKey] = nestedAgg; 

var searchRequest = new SearchRequest<Test>(); 

searchRequest.Aggregations = aggregations; 

client.Search<Test>(searchRequest); 

のようにこれを行うことができます。なぜ `AggregationDictionary`と` AggregationContainer`直接ぎこちないを使用している

This implicit conversion also sets the Aggregations and Meta properties on AggregationContainer, which is why your original attempt doesn't quote work correctly.

+0

?私は 'SearchRequest'に複数の集計をどのように追加しますか? –

+0

いくつかの理由から、直接使用するのはちょっとしたことです:)それぞれの集約タイプには名前を取るコンストラクタがありますが、 'AggregationDictionary'を使うと、キーの名前は集約に使用される名前になります。 'AggregationContainer'を直接使用すると、答えに応じて集約を割り当てるときに' Aggregations'と 'Meta'プロパティも設定する必要があります。より簡単にするために、 'AggregationBase'から' AggregationContainer'と 'AggregationDictionary'への暗黙的な変換があります。 –

+0

集計を '&&'と組み合わせることができます:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/writing-aggregations.html –

関連する問題