Don Manuel
Don Manuel

Reputation: 45

Elastic search filters aggregation with multiple filters in each bucket

I am using filters aggregation like so

"aggs": {
        "streams": {
            "filters": {
                "filters": {
                    "week1": {
                        'range': {
                            'date': {
                                'gte': start_date1,
                                'lte': end_date1,
                                "format": "YYYY-MM-dd'T'HH:mm:ss"
                            }
                        }
                    },
                    "week2": {
                        'range': {
                            'date': {
                                'gte': start_date2,
                                'lte': end_date2,
                                "format": "YYYY-MM-dd'T'HH:mm:ss"
                            }
                        }
                    }
                }
            },
            "aggs": {
                "streamCountAll": {"sum": {"field": "streamCount"}},
                "deviceName": {
                    "terms": {
                        "field": "deviceName",
                         "size": 30,
                    },
                    "aggs": {
                        "streamCount": {"sum": {"field": "streamCount"}}
                    }
                },

This attempts to find streams for two separate weeks for comparison. Now I want to add version number to the mix. Instead of week1 vs week2, I am trying to do week1 version A vs week 1 version B. My query looks like

 "aggs": {
        "streams": {
            "filters": {
                "filters": {
                    "week1": {
                        'terms' : {'version': [109, 107]},
                        'range': {
                            'date': {
                                'gte': start_date1,
                                'lte': end_date1,
                                "format": "YYYY-MM-dd'T'HH:mm:ss"
                            }
                        }
                    },
                    "week2": {
                        'range': {
                            'date': {
                                'gte': start_date2,
                                'lte': end_date2,
                                "format": "YYYY-MM-dd'T'HH:mm:ss"
                            }
                        }
                    }
                }
            },
            "aggs": {
                "streamCountAll": {"sum": {"field": "streamCount"}}

However I am getting an error "reason": "No query registered for [version]"

Can any one help me out here, with adding multiple criteria into the filters aggregation buckets.

Upvotes: 3

Views: 2736

Answers (1)

Val
Val

Reputation: 217544

You need to bring a bool/filter query into the mix like this:

"aggs": {
    "streams": {
        "filters": {
            "filters": {
                "week1": {
                    "bool": { 
                        "filter": [
                            { 'terms' : {'version': [109, 107]}}, 
                            { 'range': {
                                'date': {
                                    'gte': start_date1,
                                    'lte': end_date1,
                                    "format": "YYYY-MM-dd'T'HH:mm:ss"
                                }
                              }
                            }
                        ]
                    }
                },
                "week2": {
                    "bool": { 
                        "filter": [
                            { 'terms' : {'version': [110, 108]}}, 
                            { 'range': {
                                'date': {
                                    'gte': start_date2,
                                    'lte': end_date2,
                                    "format": "YYYY-MM-dd'T'HH:mm:ss"
                                }
                              }
                            }
                        ]
                    }
                }
            }
        },
        "aggs": {
            "streamCountAll": {"sum": {"field": "streamCount"}}

Upvotes: 6

Related Questions