基于条件的ElasticSearch中的两级嵌套聚集优于一级聚集

zyfwsgd6  于 2023-02-21  发布在  ElasticSearch
关注(0)|答案(1)|浏览(147)

我的ES文档结构是这样的:

{
"_index": "my_index",
"_type": "_doc",
"_id": "1296",
"_version": 1,
"_seq_no": 431,
"_primary_term": 1,
"_routing": "1296",
"found": true,
"_source": {
    "id": 1296,
    "test_name": "abc"
    "test_id": 513
    "inventory_arr"[
        {
            "city": "bangalore",
            "after_tat": 168,
            "before_tat": 54,
            "popularity_score": 15,
            "rank": 0,
            "discounted_price": 710,
            "labs": [
                {
                    "lab_id": 395,
                    "lab_name": "Prednalytics Laboratory",
                    "lab_rating": 34,
                },
                {
                    "lab_id": 363,
                    "lab_name": "Neuberg Diagnostics",
                    "lab_rating": 408,
                }
            ]
        },
        {
            "city": "mumbai",
            "after_tat": 168,
            "before_tat": 54,
            "popularity_score": 15,
            "rank": 0,
            "discounted_price": 710,
            "labs": [
                {
                    "lab_id": 395,
                    "lab_name": "Prednalytics Laboratory",
                    "lab_rating": 34,
                },
                {
                    "lab_id": 380,
                    "lab_name": "Neuberg Diagnostics",
                    "lab_rating": 408,
                }
            ]
        }
    ]
}

}
我想知道班加罗尔的每个实验室做了多少测试。我面临的问题是:如果使用嵌套聚合按lab_id分组,则按每个实验室分组,而不管它在哪个城市。
假设我的文档中只有一条记录,那么我期待班加罗尔市的答案如下

[
{key: 395, doc_count: 1}
{key: 363, doc_count: 1}
]

注:实验室ID在每个城市可以重复。

uurv41yg

uurv41yg1#

这个问题可以使用filter aggregation来解决。
使用嵌套聚合时,您将迭代嵌套文档。筛选器聚合会筛选出与您在内部提供的筛选器查询不匹配的嵌套文档。在您的情况下,您可能希望筛选出不在Bangalore市内的嵌套文档。删除这些嵌套文档后,您可以对lab_id使用另一个术语存储桶聚合。
祝你好运!

相关问题