如何使用c#迭代弹性搜索Bucket

时间:2015-08-13 14:10:39

标签: c# elasticsearch nest

目前,我正在使用NEST API从弹性搜索中获取数据,我正在尝试使用Term Aggregation并且响应有效但我无法访问存储桶中的数据。 基本上,无法遍历存储桶中的字段。

这是我的代码聚合

       var result = client.Search<GoodDataAttribute>(s => s 
                .Aggregations(a => a 
                .Terms("Resourcegroup", st => st 
                .Field(o => o.ResourceGroup) 
                .Size(16) 
                .ExecutionHint(TermsAggregationExecutionHint.Map) 
                ))); 
            var result1 = result.Documents; 
            Console.WriteLine(result1); 
            foreach (var result2 in result.Documents) 
            { 
                Console.WriteLine(result2.ResourceGroup); 
            } 
            var resultGroups = result.Aggregations; 
            Console.WriteLine(resultGroups.Count); 
            foreach (var resultGroup in resultGroups.Values) 
            { 
                Console.WriteLine(resultGroup.ToString()); 
            } 

1 个答案:

答案 0 :(得分:2)

您需要使用结果的Aggs属性。根据文件:

  

使用请求中指定的密钥从响应的Aggs属性访问聚合的结果...

在您的示例中,这将是Resourcegroup。我在解决方案中使用了它,它按预期工作。您的代码应该类似于

var agg = results.Aggs.Terms("Resourcegroup");
if (agg!= null && agg.Items.Count > 0)
{
    foreach (var resourceGroupAgg in agg.Items)
    {
        // do something with the aggregations
        // the term is accessed using the Key property
        var term = resourceGroupAgg.Key;
        // the count is accessed through the DocCount property
        var count = resourceGroupAgg.Count;
    }
}

documentation中有更详细的内容。

希望这有帮助。