每个桶内有多个过滤器的Elasticsearch过滤器聚合

3

我正在使用类似下面的过滤聚合:

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

这是一个尝试查找两个不同周进行比较的流程。现在我想将版本号添加到其中。 与其使用week1和week2进行比较,我正在尝试进行week1版本A和week1版本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"}}

然而,我遇到了一个错误:“reason”:“未注册查询[version]”

有人能帮我解决这个问题吗?需要将多个条件添加到筛选聚合桶中。

1个回答

6
您需要将一个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"}}

谢谢!这个方法非常有效。 我尝试过投票,但我还不能这样做!更新:标记为已接受的答案。 - Don Manuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接