2017-02-15 61 views
1

如何动态组合一个查询中的多个聚合?Elasticsearch数组中的多个聚合

我知道做“硬编码”:

request.Aggregations = new TermsAggregation("agg_field1") { 
    Field = "field1" 
} 
&& new TermsAggregation("agg_field2") { 
    Field = "field2" 
}; 

但自从我使用一个数组包含的领域,我需要像下面这样。但我发现了一个编译器错误,因为“AggregationDictionary”和“TermsAggregation”不能由经营者& ='组合:

string[] Fields = new[]{ "field1", "field2" } 
foreach (string sField in Fields) 
{ 
    request.Aggregations &= new TermsAggregation("agg_" + sField) 
    { 
     Field = sField 
    }; 
} 

我有喜欢的“产品”,“品牌”领域的商品数据,“潜行”。 对于这个领域,我想通过聚合获得每个不同的价值。它用于显示三个组合框以及每个域的可能值。

回答

1

有几种不同的方式可以建立一组聚合。最近你正在试图做什么是

var request = new SearchRequest<object>(); 

string[] Fields = new[] { "field1", "field2" }; 
AggregationBase aggregations = null; 
foreach (string sField in Fields) 
{ 
    var termsAggregation = new TermsAggregation("agg_" + sField) 
    { 
     Field = sField 
    }; 

    if (aggregations == null) 
    { 
     aggregations = termsAggregation; 
    } 
    else 
    { 
     aggregations &= termsAggregation; 
    } 
} 

request.Aggregations = aggregations; 

client.Search<object>(request); 

它建立以下查询

{ 
    "aggs": { 
    "agg_field1": { 
     "terms": { 
     "field": "field1" 
     } 
    }, 
    "agg_field2": { 
     "terms": { 
     "field": "field2" 
     } 
    } 
    } 
} 
+0

这工作,谢谢! – Undercover1989