从 NEST C# 嵌套聚合中获取 Elasticsearch 结果

Posted

技术标签:

【中文标题】从 NEST C# 嵌套聚合中获取 Elasticsearch 结果【英文标题】:Get Elasticsearch result from a NEST C# nested aggregation 【发布时间】:2017-06-30 11:24:52 【问题描述】:

我有这个 Elasticsearch NEST 查询:

var res = elastic.Search<SegmentRecord>(s => s.Index(esIndex).Aggregations(a => a.Terms("agg", x => x.Field(o => o.InstrumentName).Aggregations(a1 => a1.Terms("agg2", f => f.Field(y => y.GroupId))))));

如何循环遍历所有 InstrumentName 字段,并为每个字段循环遍历所有 GroupId 字段?

【问题讨论】:

【参考方案1】:

在 Nest 5.4.0 上

foreach (var bucket in res.Aggs.Terms("agg").Buckets)
         
             foreach (var innerBucket in bucket.Terms("agg2").Buckets)
             
                 System.Console.WriteLine($"agg:bucket.Key, agg2:innerBucket.Key - innerBucket.DocCount");
             
           

【讨论】:

文档链接:elastic.co/guide/en/elasticsearch/client/net-api/current/… 前段时间就遇到过这个问题,found a great article on the matter【参考方案2】:

这就是我使用嵌套聚合访问子存储桶的方式。

var yourAgg = result.Aggregations.Terms("YourParentField");
foreach (var child in yourAgg .Buckets)

   var aggs = child.Terms("YourChildField").Buckets;
   foreach (var item in aggs)
   
      perDealerAggItems.Add(new AggregateItem()
        
              Count = item.DocCount ?? 0,
              Key = item.Key,
              ParentList = field
          );
     

【讨论】:

以上是关于从 NEST C# 嵌套聚合中获取 Elasticsearch 结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# Nest 中将日期值发送到 elasticsearch 聚合查询

如何使用 Nest 客户端将日期范围应用于聚合查询

从 mongodb 聚合中获取深层嵌套数组并包含在结果中

如何从 JavaScript 对象呈现 HTML 中的嵌套列表?

如何使用 c# 从 ajax 中的嵌套 JSON 对象中获取值

滚动或分页 Elasticsearch 聚合 - Nest 框架