嵌套数据搜索

时间:2019-06-24 08:33:23

标签: elasticsearch

我需要对嵌套数据进行汇总

 {
    "size": 0,
    "aggs": {
        "group_by_day": {
            "date_histogram": {
                "field": "timestamp",
                "interval": "day"
            },
            "aggs": {
                "corridors": {
                    "nested": {
                        "path": "rowData"
                    },
                    "aggs": {
                        "Entrance": {
                            "filter": {
                                "match": {
                                    "rowData.corridors.name": "Office"
                                }
                            },
                            "aggs": {
                                "SumExit": {
                                    "sum": {
                                        "field": "rowData.corridors.north"
                                    }
                                },
                                "SumIn": {
                                    "sum": {
                                        "field": "rowData.corridors.south"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "timestamp": {
                            "gte": "2019-06-10T00:00:00.000",
                            "lte": "2019-06-18T06:11:18.618Z"
                        }
                    }
                },
                {
                    "term": {
                        "account": "5ca195b535374512130add60"
                    }
                },
                {
                    "term": {
                        "device._id": "5cae98291b97031201d797a0"
                    }
                }
            ]
        }
    }
}

这是我得到的数据的一个例子

{
    "corridor": [
        {
            "name": "Entrance",
            "south": 2,
            "north": 1
        },
        {
            "name": "Office",
            "south": 2,
            "north": 1
        }
    ]
}

我需要根据名称ex:entrance汇总南北和 但是我写的查询给了我入口和办公室的总和  我怎样才能只过滤入口的总和

1 个答案:

答案 0 :(得分:0)

在您的情况下,它的rowData.corridors需要嵌套字段。因此,如果我假设您的映射是正确的,则只需更正聚合的这一部分:

"aggs": {
    "corridors": {
        "nested": {
            "path": "rowData.corridors" <-- HERE
        },
...

似乎您的映射中配置的嵌套字段是rowData。但是,使用此配置,所有通道都在嵌套的“ rowData”文档中展平。

我希望我的答案足够清楚