【问题标题】:Nest aggregation not working correctly嵌套聚合无法正常工作
【发布时间】:2015-05-12 14:28:57
【问题描述】:

我有一个用例,我需要使用 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 库有什么问题,请告诉我

【问题讨论】:

  • 请告诉我您收到的一个聚合响应
  • 第一个聚合得到重新调整

标签: c# elasticsearch nest


【解决方案1】:

如果您使用术语聚合,那么您需要使用带有过滤器的聚合。

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

【讨论】:

  • 感谢您的回复。当我打印 SearchResponse.ConnectionStatus 时,我可以看到两个聚合都返回了。我面临的问题是我的 SearchResults.Aggs.ExtendendStats() 只有第一次聚合的详细信息。
  • 尽管响应正确来自 ES,但 NEST 中的反序列化如何丢弃第二个聚合
猜你喜欢
  • 1970-01-01
  • 2021-01-01
  • 2014-05-13
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2021-02-20
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多