def test_nesting_aggregations(self):
        json_output = {
            "query": {
                "filtered": {
                    "filter": {
                        "and": [{
                            "match_all": {}
                        }]
                    },
                    "query": {
                        "match_all": {}
                    }
                }
            },
            "aggs": {
                "users": {
                    "terms": {
                        "field": "user_id",
                        "size": SIZE_LIMIT
                    },
                    "aggs": {
                        "closed": {
                            "filter": {
                                "term": {
                                    "closed": True
                                }
                            }
                        }
                    }
                },
                "total_by_status": {
                    "filters": {
                        "filters": {
                            "closed": {
                                "term": {
                                    "closed": True
                                }
                            },
                            "open": {
                                "term": {
                                    "closed": False
                                }
                            }
                        }
                    }
                }
            },
            "size": SIZE_LIMIT
        }

        query = HQESQuery('cases').aggregations([
            TermsAggregation("users", 'user_id').aggregation(
                FilterAggregation('closed', filters.term('closed', True))),
            FiltersAggregation('total_by_status').add_filter(
                'closed',
                filters.term('closed',
                             True)).add_filter('open',
                                               filters.term('closed', False))
        ])
        self.checkQuery(query, json_output)
示例#2
0
 def aggregation(self):
     if self.expand_value is None:
         return MissingAggregation(
             self.es_alias, self.data_source_field
         )
     return FilterAggregation(
         self.es_alias, filters.term(self.data_source_field, self.expand_value)
     )
    def test_result_parsing_basic(self):
        query = HQESQuery('cases').aggregations([
            FilterAggregation('closed', filters.term('closed', True)),
            FilterAggregation('open', filters.term('closed', False))
        ])

        raw_result = {
            "aggregations": {
                "closed": {
                    "doc_count": 1
                },
                "open": {
                    "doc_count": 2
                }
            }
        }
        queryset = ESQuerySet(raw_result, deepcopy(query))
        self.assertEqual(queryset.aggregations.closed.doc_count, 1)
        self.assertEqual(queryset.aggregations.open.doc_count, 2)
示例#4
0
def expand_column(report_column, distinct_values, lang):
    columns = []
    for index, val in enumerate(distinct_values):
        es_alias = u"{}_dash_{}".format(report_column.column_id, index)
        ui_alias = u"{}-{}".format(report_column.column_id, index)
        # todo aggregation only supports # of matches
        columns.append(
            UCRExpandEsDatabaseSubcolumn(
                u"{}-{}".format(report_column.get_header(lang), val),
                expand_value=val,
                aggregation=FilterAggregation(
                    es_alias, filters.term(report_column.field, val)),
                es_alias=es_alias,
                ui_alias=ui_alias,
                sortable=False,
                data_slug=u"{}-{}".format(report_column.column_id, index),
                format_fn=report_column.get_format_fn(),
                help_text=report_column.description))
    return columns
    def test_result_parsing_complex(self):
        query = HQESQuery('cases').aggregation(
            TermsAggregation("users", 'user_id').aggregation(
                FilterAggregation('closed', filters.term(
                    'closed', True))).aggregation(
                        FilterAggregation('open', filters.term(
                            'closed', False)))).aggregation(
                                RangeAggregation('by_date', 'name', [
                                    AggregationRange(end='c'),
                                    AggregationRange(start='f'),
                                    AggregationRange(start='k', end='p')
                                ]))

        raw_result = {
            "aggregations": {
                "users": {
                    "buckets": [{
                        "closed": {
                            "doc_count": 0
                        },
                        "doc_count": 2,
                        "key": "user1",
                        "open": {
                            "doc_count": 2
                        }
                    }],
                    "doc_count_error_upper_bound":
                    0,
                    "sum_other_doc_count":
                    0
                },
                "by_date": {
                    "buckets": {
                        "*-c": {
                            "to": "c",
                            "doc_count": 3
                        },
                        "f-*": {
                            "from": "f",
                            "doc_count": 8
                        },
                        "k-p": {
                            "from": "k",
                            "to": "p",
                            "doc_count": 6
                        }
                    }
                }
            },
        }
        queryset = ESQuerySet(raw_result, deepcopy(query))
        self.assertEqual(queryset.aggregations.users.buckets.user1.key,
                         'user1')
        self.assertEqual(queryset.aggregations.users.buckets.user1.doc_count,
                         2)
        self.assertEqual(
            queryset.aggregations.users.buckets.user1.closed.doc_count, 0)
        self.assertEqual(
            queryset.aggregations.users.buckets.user1.open.doc_count, 2)
        self.assertEqual(
            queryset.aggregations.users.buckets_dict['user1'].open.doc_count,
            2)
        self.assertEqual(queryset.aggregations.users.counts_by_bucket(),
                         {'user1': 2})
        self.assertEqual(queryset.aggregations.by_date.counts_by_bucket(), {
            '*-c': 3,
            'f-*': 8,
            'k-p': 6,
        })