嵌套聚合无法正常工作

时间:2015-05-12 05:56:34

标签: c# elasticsearch nest

我有一个用例,我需要使用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字典,但它只有一个聚合字段的条目而不是两个。 如果我遗漏了某些内容,或者是NEST库的问题,请告诉我

1 个答案:

答案 0 :(得分: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");