弹性搜索过滤每个存储区中多个过滤器的聚合

时间:2017-09-21 02:06:30

标签: elasticsearch

我正在使用像这样的过滤器聚合

"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"}}
                    }
                },

这会尝试在两个星期内找到流进行比较。现在我想添加版本号。 而不是第1周和第2周,我试图做第1周版本A对比第1周版本B. 我的查询看起来像

 "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"}}

但是我收到错误"原因":"没有为[版本]注册查询"

任何人都可以帮助我,在过滤器聚合存储桶中添加多个条件。

1 个答案:

答案 0 :(得分:2)

您需要将bool/filter个问题添加到这样的混合中:

"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"}}
相关问题