Aggregation constructor

Aggregation(
  1. String name,
  2. Map<String, dynamic> param,
  3. Map<String, dynamic> m
)

Implementation

Aggregation(String name, Map<String, dynamic> param, Map<String, dynamic> m) {
  this.name = name;
  value = m['value'];
  values = m['values'] as Map?;
  docCountErrorUpperBound = m['doc_count_error_upper_bound'] as int?;
  sumOtherDocCount = m['sum_other_doc_count'] as int?;
  docCount = m['doc_count'] as int?;

  final hitsMap = m['hits'] ?? const {};
  final hitsList = (hitsMap['hits'] as List?)?.cast<Map>() ?? const <Map>[];
  final hits = hitsList
      .map((map) => Doc(
            map['_id'] as String,
            map['_source'] as Map,
            index: map['_index'] as String,
            type: map['_type'] as String,
            score: (map['_score'] as double?) ?? 0.0,
            sort: map['sort'] as List<dynamic>,
          ))
      .toList();
  this.hits = hits.isEmpty ? null : hits;

  final bucketMapList = (m['buckets'] as List?)?.cast<Map>() ?? <Map>[];
  final buckets = bucketMapList.map<Bucket>((bucketMap) {
    final bucket = Bucket()
      ..key = bucketMap['key']
      ..docCount = bucketMap['doc_count'] as int;
    final aggMap = param['aggs'] as Map<String, dynamic>? ?? const {};
    final aggs = aggMap.map<String, Aggregation>((subName, subParam) {
      final subMap = bucketMap[subName] as Map<String, dynamic>;
      return MapEntry(subName,
          Aggregation(subName, subParam as Map<String, dynamic>, subMap));
    });
    bucket.aggregations = aggs.isEmpty ? null : aggs;
    return bucket;
  }).toList();
  this.buckets = buckets.isEmpty ? null : buckets;
}