2015-05-12 155 views
0

我有一個用例,我需要使用C#在多個列上進行聚合。 我使用NEST庫,這和我現在面臨的以下問題嵌套聚合不能正常工作

查詢C#:

var searchRequest = new SearchRequest 
     { 
      SearchType = SearchType.Count, 
      Filter = filter, 
      Aggregations = new Dictionary<string, IAggregationContainer> 
      { 
       { "a", new AggregationContainer 
          { 
           ExtendedStats = new ExtendedStatsAggregator() 
           { 
            Field = "a" 
           } 
          } 
       }, 
       { "b", new AggregationContainer 
          { 
           ExtendedStats = new ExtendedStatsAggregator() 
           { 
            Field = "b" 
           } 
          } 
       } 
      } 
     }; 

當我收到來自NEST響應,但是我正在只會導致一個聚集。我正在查看SearchResult.Agg字典,但它只有一個聚合字段而不是兩個字段。 讓我知道如果我失蹤soemthing或與NEST圖書館

+0

請讓我知道,一個聚集你在響應 – USER007

+0

第一aggreagtion越來越得到重新調校 –

回答

0

如果您使用術語聚合,那麼你需要使用聚合過濾器。

var qryRes1 = client.Search<object>(x => x 

        .Aggregations(ag => ag 
          .Filter("filter", (flt => flt 
           .Filter(f => 
           { 
            FilterContainer filter = null; 
            filter &= f.Query(qr => qr.Term(wl => wl.OnField("a").Value("the value you need to filter for field a"))); 
            return filter; 
           }) 
             .Aggregations(agr => agr 

             .Terms("b", tr => 
             { 
              TermsAggregationDescriptor<object> trmAggDescriptor = new TermsAggregationDescriptor<object>(); 
              trmAggDescriptor.Field("b"); 


              return trmAggDescriptor; 
             })))) 
         )); 
     var terms = qryRes1.Aggs.Filter("filter").Terms("b"); 
+0

感謝您的答覆。當我打印SearchResponse.ConnectionStatus時,我可以看到兩個聚合都被返回。我面臨的問題是我的SearchResults.Aggs.ExtendendStats()只有第一次聚合的細節。 –

+0

一些如何在NEST反序列化正在放棄第二個聚合雖然答案正確來自ES –