2016-02-15 66 views
0

我一直在這裏搜索,但我沒有找到類似的東西......但是,如果它已經逃脫了我的道歉,我希望你能幫忙找到正確的方向。ElasticSearch中的多個最大/最小聚合(C#巢)

我一直在尋找一種方式來實現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」字段的最大和最小總計值

謝謝!

回答

0

你想要的是Stats Aggregation

下面是一個例子的輸入/輸出

INPUT

​​

結果

{ 
    "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" 
    } 
    } 
} 
+0

它很近,我剛剛發現它。 問題是一次有超過1場。 無論如何,感謝您的幫助。 –

0

我已經計算出來。在有人的情況下具有相同的疑問:

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

乾杯!