Elasticsearch过滤器聚合,每个桶中有多个过滤器

Don*_*uel 3 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"}}
                    }
                },
Run Code Online (Sandbox Code Playgroud)

这会尝试查找两个单独星期的流以进行比较。现在我想添加版本号。我尝试执行 week1 版本 A 与 week 1 版本 B,而不是 week1 与 week2。我的查询看起来像

 "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"}}
Run Code Online (Sandbox Code Playgroud)

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

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

Val*_*Val 6

您需要bool/filter像这样将查询添加到组合中:

\n\n
"aggs": {\n    "streams": {\n        "filters": {\n            "filters": {\n                "week1": {\n                    "bool": { \n                        "filter": [\n                            {\xc2\xa0\'terms\' : {\'version\': [109, 107]}}, \n                            { \'range\': {\n                                \'date\': {\n                                    \'gte\': start_date1,\n                                    \'lte\': end_date1,\n                                    "format": "YYYY-MM-dd\'T\'HH:mm:ss"\n                                }\n                              }\n                            }\n                        ]\n                    }\n                },\n                "week2": {\n                    "bool": { \n                        "filter": [\n                            {\xc2\xa0\'terms\' : {\'version\': [110, 108]}}, \n                            { \'range\': {\n                                \'date\': {\n                                    \'gte\': start_date2,\n                                    \'lte\': end_date2,\n                                    "format": "YYYY-MM-dd\'T\'HH:mm:ss"\n                                }\n                              }\n                            }\n                        ]\n                    }\n                }\n            }\n        },\n        "aggs": {\n            "streamCountAll": {"sum": {"field": "streamCount"}}\n
Run Code Online (Sandbox Code Playgroud)\n