Результаты фильтрации ElasticSearch по длине сегментов (количество уникальных ключей в сегменте) - PullRequest
0 голосов
/ 15 января 2019

Я хочу записать упругую агрегацию, которая возвращает ключ только в том случае, если длина его внутреннего сегмента больше 1.

"aggs": {
    "product_definitions": {
        "terms": {
            "field": "definition_name",
            "size": 200,
            "exclude": "NO_MATCH",
            "min_doc_count": 5
        },
        "aggs": {
            "product_instances": {
                "terms": {
                    "field": "data_source_name",
                    "size": 100
                }
            }
        }
    }
}

Это мое объединение и оно возвращает:

"aggregations": {
    "product_definitions": {
        "doc_count_error_upper_bound": 10,
        "sum_other_doc_count": 29281,
        "buckets": [
            {
                "key": "DANA ANTRİKOT KG",
                "doc_count": 13,
                "product_instances": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [
                        {
                            "key": "SariyerMarketCom",
                            "doc_count": 13
                        }
                    ]
                }
            },
            {
                "key": "Keskinoğlu Piliç Salam 700G",
                "doc_count": 10,
                "product_instances": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [
                        {
                            "key": "HappyCenterComTr",
                            "doc_count": 9
                        },
                        {
                            "key": "SanalMarketComTr",
                            "doc_count": 1
                        }
                    ]
                }
            },
            {
                "key": "Doğuş Filiz Çayı 1000 G",
                "doc_count": 9,
                "product_instances": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [
                        {
                            "key": "HappyCenterComTr",
                            "doc_count": 7
                        },
                        {
                            "key": "SanalMarketComTr",
                            "doc_count": 2
                        }
                    ]
                }
            }
       ]
    }
 }

Я хочу ключи в определениях продуктов, только если их экземпляры продуктов содержат более двух ключей. В этом примере он должен возвращать только 2. и 3. ключи, а не 1., потому что группа 1. ключ содержит только 1 ключ, который является

"buckets": [
              {
                  "key": "SariyerMarketCom",
                   "doc_count": 13
              }
            ]

1 Ответ

0 голосов
/ 15 января 2019

Вы можете использовать bucket_selector конвейерные агрегации для достижения этой цели, например:

"aggs": {
    "product_definitions": {
        "terms": {
            "field": "definition_name",
            "size": 200,
            "exclude": "NO_MATCH",
            "min_doc_count": 5
        },
        "aggs": {
            "product_instances": {
                "terms": {
                    "field": "data_source_name",
                    "size": 100
                }
            },
            "minimum_2": {
                "bucket_selector": {
                    "buckets_path": {
                        "count": "product_instances._bucket_count" 
                    },
                    "script": "params.count >= 2"
                }
            }
        }
    }
}
...