繁体   English   中英

Elasticsearch来自数组的多个聚合

[英]Elasticsearch multiple aggregations from array

如何动态地在一个查询中动态组合多个聚合?

我知道要做“硬编码”:

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
    };
}

我有文章数据与“产品”,“品牌”,“模式”等字段。 对于这个字段,我想通过聚合获得每个不同的值。 这是为了显示三个组合框,每个字段的可能值。

您可以通过几种不同的方式构建聚合集合。 离你想做的最近的是

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"
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM