ElasticSearch Filtering по ключам агрегации терминов - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть запрос ES, который возвращает мне данные в следующем формате "

"by_group": {
    "doc_count_error_upper_bound": 55,
    "sum_other_doc_count": 1094497,
    "buckets": [{
        "key": "a838c7df-1ea9-48f1-aa71-69936b54f47d",
        "doc_count": 69,
        "by_subGroup": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [{
                    "key": "k1",
                    "doc_count": 45
                },
                {
                    "key": "k2",
                    "doc_count": 7
                },
                {
                    "key": "k3",
                    "doc_count": 6
                },
                {
                    "key": "k6",
                    "doc_count": 6
                }
            ]
        }
    }]
}

Я хотел бы отфильтровать свой результат (by_group), используя ключи моей подгруппы. Например, я хочу только by_groupкоторые имеют ключи: k1, k2, но не k3.

Можно ли фильтровать таким образом?

мой текущий запрос выглядит так:

{
    "size": 0,
    "query": {
    },
    "aggs": {
            "aggs": {
                "by_group": {
                    "terms": {
                        "field": "field1",
                        "size": 10
                    },
                    "aggs": {
                        "by_subGroup": {
                            "terms": {
                                "field": "field2",
                                "size": 1000
                            }
                        }
                    }
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 21 февраля 2019

Использовать Фильтр в агрегации.

{
    "size": 0,
    "query": {
    },
    "aggs": {
            "aggs": {
                "by_group": {
                    "terms": {
                        "field": "field1",
                        "size": 10
                    },
                    "aggs": {
                        "by_subGroup": {
                            "filter": {
                                "terms" : {
                                    "field2": ["k1","k2]
                                }
                            },
                            "terms": {
                                "field": "field2",
                                "size": 1000
                            }
                        }
                    }
                }
            }
        }
    }
}
...