【问题标题】:Multiple max/min aggregation in ElasticSearch (C# Nest)ElasticSearch 中的多个最大/最小聚合(C# Nest)
【发布时间】:2016-05-27 01:39:56
【问题描述】:

我一直在这里搜索,但没有找到类似的东西......但是,如果它逃脱了我,我提前道歉,我希望你能帮助找到正确的方向。

我正在寻找一种在 NEST C# 中实现以下内容的方法:

"aggs": {

  "sys_created_on_max": {
     "max": {
       "field": "sys_created_on"
      }
   },
   "sys_created_on_min":{
      "min": {
        "field": "sys_created_on"
      }
   },
  "sys_updated_on_max": {
     "max": {
       "field": "sys_updated_on"
      }
   },
   "sys_updated_on_min":{
      "min": {
        "field": "sys_updated_on"
      }
   }
}

我想要执行的意思,在同一个语句中:

“sys_created_on”字段的最大和最小聚合值 并且 “sys_updated_on”字段的最大值和最小值聚合值

谢谢!

【问题讨论】:

    标签: c# elasticsearch max aggregation nest


    【解决方案1】:

    你想要的是Stats Aggregation

    这是一个输入/输出示例

    输入

    GET devdev/redemption/_search
    {
      "size": 0,
      "aggs": {
        "a1": {
          "stats": {
            "field": "reporting.campaign.endDate"
          }
        }
      }
    }
    

    结果

    {
      "took": 97,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
      },
      "hits": {
        "total": 146,
        "max_score": 0,
        "hits": []
      },
      "aggregations": {
        "a1": {
          "count": 11,
          "min": 1443675599999,
          "max": 1446353999999,
          "avg": 1445607818180.818,
          "sum": 15901685999989,
          "min_as_string": "1443675599999",
          "max_as_string": "1446353999999",
          "avg_as_string": "1445607818180",
          "sum_as_string": "15901685999989"
        }
      }
    }
    

    【讨论】:

    • 它很接近,我刚刚找到它。问题是一次有多个字段。无论如何,谢谢你的帮助。
    【解决方案2】:

    我想通了。如果有人有同样的疑问:

    1) 创建一个 AggregationContainerDescriptor:

    Func<AggregationContainerDescriptor<dynamic>, IAggregationContainer> aggregationsSelector = null;
    

    2) 填写:

    foreach (var field in requestList)
    {
        aggregationsSelector += ms => ms.Max(field.MaxAggregationAlias, mx => mx.Field(field.Name))
                                        .Min(field.MinAggregationAlias, mx => mx.Field(field.Name));
    
    }
    

    3) 查询它:

    var esResponse = _esClient.Raw.Search<dynamic>(indexName.ToLower(), new PostData<dynamic>(jsonStr), null);
    

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2020-12-07
      • 2014-09-17
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多