Elasticsearch Получить только те гистограммы даты, чей размер сегмента больше заданного числа - PullRequest
1 голос
/ 26 апреля 2019

У меня есть следующий запрос, в котором я получаю данные за последние 3 года по месяцам, а также я получаю количество месяцев (сегментов), в которых эти данные присутствуют.Вот мой запрос:

{
    "size": 0,
    "query": {
        "bool": {
            "filter": {
                "terms": {
                    "compId": [
                        111,
                        112
                    ]
                }
            },
            "must": {
                "range": {
                    "dateCreated": {
                        "from": "2016-04-01",
                        "to": "2019-03-31",
                        "format": "yyyy-MM-dd"
                    }
                }
            }
        }
    },
    "aggs": {
        "grp_company": {
            "terms": {
                "field": "compId"
            },
            "aggs": {
                "data_per_month": {
                    "date_histogram": {
                        "field": "dateCreated",
                        "interval": "month"
                    }
                },
                "count_buckets": {
                    "stats_bucket": { --> I am getting the count of buckets here
                        "buckets_path": "data_per_month._count"
                    }
                }
            }
        }
    }
}

Однако, теперь я хочу иметь только те date_histograms, чей счетчик больше 30. Возможно ли это в ElasticSearch?Если да, то как?

Приведенный выше запрос дает мне следующий результат:

{
    "took": 68,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 454566,
        "max_score": 0,
        "hits": []
    },
    "aggregations": {
        "grp_company": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": 111,
                    "doc_count": 609014,
                    "data_per_month": {
                        "buckets": [
                            {
                                "key_as_string": "2017-07-01T00:00:00.000Z",
                                "key": 1498867200000,
                                "doc_count": 638
                            },
                            {
                                "key_as_string": "2017-08-01T00:00:00.000Z",
                                "key": 1501545600000,
                                "doc_count": 512
                            },
                            {
                                "key_as_string": "2017-09-01T00:00:00.000Z",
                                "key": 1504224000000,
                                "doc_count": 491
                            },
                            {
                                "key_as_string": "2017-10-01T00:00:00.000Z",
                                "key": 1506816000000,
                                "doc_count": 548
                            },
                            {
                                "key_as_string": "2017-11-01T00:00:00.000Z",
                                "key": 1509494400000,
                                "doc_count": 504
                            },
                            {
                                "key_as_string": "2017-12-01T00:00:00.000Z",
                                "key": 1512086400000,
                                "doc_count": 415
                            },
                            {
                                "key_as_string": "2018-01-01T00:00:00.000Z",
                                "key": 1514764800000,
                                "doc_count": 759
                            },
                            {
                                "key_as_string": "2018-02-01T00:00:00.000Z",
                                "key": 1517443200000,
                                "doc_count": 98564
                            },
                            {
                                "key_as_string": "2018-03-01T00:00:00.000Z",
                                "key": 1519862400000,
                                "doc_count": 29185
                            },
                            {
                                "key_as_string": "2018-04-01T00:00:00.000Z",
                                "key": 1522540800000,
                                "doc_count": 38522
                            },
                            {
                                "key_as_string": "2018-05-01T00:00:00.000Z",
                                "key": 1525132800000,
                                "doc_count": 22821
                            },
                            {
                                "key_as_string": "2018-06-01T00:00:00.000Z",
                                "key": 1527811200000,
                                "doc_count": 31076
                            },
                            {
                                "key_as_string": "2018-07-01T00:00:00.000Z",
                                "key": 1530403200000,
                                "doc_count": 67150
                            },
                            {
                                "key_as_string": "2018-08-01T00:00:00.000Z",
                                "key": 1533081600000,
                                "doc_count": 13464
                            },
                            {
                                "key_as_string": "2018-09-01T00:00:00.000Z",
                                "key": 1535760000000,
                                "doc_count": 59498
                            },
                            {
                                "key_as_string": "2018-10-01T00:00:00.000Z",
                                "key": 1538352000000,
                                "doc_count": 27222
                            },
                            {
                                "key_as_string": "2018-11-01T00:00:00.000Z",
                                "key": 1541030400000,
                                "doc_count": 46009
                            },
                            {
                                "key_as_string": "2018-12-01T00:00:00.000Z",
                                "key": 1543622400000,
                                "doc_count": 55696
                            },
                            {
                                "key_as_string": "2019-01-01T00:00:00.000Z",
                                "key": 1546300800000,
                                "doc_count": 45538
                            },
                            {
                                "key_as_string": "2019-02-01T00:00:00.000Z",
                                "key": 1548979200000,
                                "doc_count": 49606
                            },
                            {
                                "key_as_string": "2019-03-01T00:00:00.000Z",
                                "key": 1551398400000,
                                "doc_count": 20796
                            }
                        ]
                    },
                    "count_buckets": {
                        "count": 21,
                        "min": 415,
                        "max": 98564,
                        "avg": 29000.666666666668,
                        "sum": 609014
                    }
                },
                {
                    "key": 112,
                    "doc_count": 98564,
                    "data_per_month": {
                        "buckets": [
                            {
                                "key_as_string": "2016-09-01T00:00:00.000Z",
                                "key": 1472688000000,
                                "doc_count": 3123
                            },
                            {
                                "key_as_string": "2016-10-01T00:00:00.000Z",
                                "key": 1475280000000,
                                "doc_count": 3156
                            },
                            {
                                "key_as_string": "2016-11-01T00:00:00.000Z",
                                "key": 1477958400000,
                                "doc_count": 1489
                            },
                            {
                                "key_as_string": "2016-12-01T00:00:00.000Z",
                                "key": 1480550400000,
                                "doc_count": 1948
                            },
                            {
                                "key_as_string": "2017-01-01T00:00:00.000Z",
                                "key": 1483228800000,
                                "doc_count": 3996
                            },
                            {
                                "key_as_string": "2017-02-01T00:00:00.000Z",
                                "key": 1485907200000,
                                "doc_count": 2766
                            },
                            {
                                "key_as_string": "2017-03-01T00:00:00.000Z",
                                "key": 1488326400000,
                                "doc_count": 3869
                            },
                            {
                                "key_as_string": "2017-04-01T00:00:00.000Z",
                                "key": 1491004800000,
                                "doc_count": 6251
                            },
                            {
                                "key_as_string": "2017-05-01T00:00:00.000Z",
                                "key": 1493596800000,
                                "doc_count": 2640
                            },
                            {
                                "key_as_string": "2017-06-01T00:00:00.000Z",
                                "key": 1496275200000,
                                "doc_count": 5541
                            },
                            {
                                "key_as_string": "2017-07-01T00:00:00.000Z",
                                "key": 1498867200000,
                                "doc_count": 5686
                            },
                            {
                                "key_as_string": "2017-08-01T00:00:00.000Z",
                                "key": 1501545600000,
                                "doc_count": 6524
                            },
                            {
                                "key_as_string": "2017-09-01T00:00:00.000Z",
                                "key": 1504224000000,
                                "doc_count": 8351
                            },
                            {
                                "key_as_string": "2017-10-01T00:00:00.000Z",
                                "key": 1506816000000,
                                "doc_count": 4848
                            },
                            {
                                "key_as_string": "2017-11-01T00:00:00.000Z",
                                "key": 1509494400000,
                                "doc_count": 4209
                            },
                            {
                                "key_as_string": "2017-12-01T00:00:00.000Z",
                                "key": 1512086400000,
                                "doc_count": 1092
                            },
                            {
                                "key_as_string": "2018-01-01T00:00:00.000Z",
                                "key": 1514764800000,
                                "doc_count": 2425
                            },
                            {
                                "key_as_string": "2018-02-01T00:00:00.000Z",
                                "key": 1517443200000,
                                "doc_count": 336
                            },
                            {
                                "key_as_string": "2018-03-01T00:00:00.000Z",
                                "key": 1519862400000,
                                "doc_count": 5092
                            },
                            {
                                "key_as_string": "2018-04-01T00:00:00.000Z",
                                "key": 1522540800000,
                                "doc_count": 1354
                            },
                            {
                                "key_as_string": "2018-05-01T00:00:00.000Z",
                                "key": 1525132800000,
                                "doc_count": 2022
                            },
                            {
                                "key_as_string": "2018-06-01T00:00:00.000Z",
                                "key": 1527811200000,
                                "doc_count": 1981
                            },
                            {
                                "key_as_string": "2018-07-01T00:00:00.000Z",
                                "key": 1530403200000,
                                "doc_count": 1751
                            },
                            {
                                "key_as_string": "2018-08-01T00:00:00.000Z",
                                "key": 1533081600000,
                                "doc_count": 1705
                            },
                            {
                                "key_as_string": "2018-09-01T00:00:00.000Z",
                                "key": 1535760000000,
                                "doc_count": 2617
                            },
                            {
                                "key_as_string": "2018-10-01T00:00:00.000Z",
                                "key": 1538352000000,
                                "doc_count": 2217
                            },
                            {
                                "key_as_string": "2018-11-01T00:00:00.000Z",
                                "key": 1541030400000,
                                "doc_count": 1734
                            },
                            {
                                "key_as_string": "2018-12-01T00:00:00.000Z",
                                "key": 1543622400000,
                                "doc_count": 1962
                            },
                            {
                                "key_as_string": "2019-01-01T00:00:00.000Z",
                                "key": 1546300800000,
                                "doc_count": 2601
                            },
                            {
                                "key_as_string": "2019-02-01T00:00:00.000Z",
                                "key": 1548979200000,
                                "doc_count": 2573
                            },
                            {
                                "key_as_string": "2019-03-01T00:00:00.000Z",
                                "key": 1551398400000,
                                "doc_count": 2705
                            }
                        ]
                    },
                    "count_buckets": {
                        "count": 31,
                        "min": 336,
                        "max": 8351,
                        "avg": 3179.483870967742,
                        "sum": 98564
                    }
                }
            ]
        }
    }
}

Я хочу только те сегменты, чье "количество" в "count_buckets" больше 30.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Если я правильно понял, вы пытаетесь отфильтровать корзину по значению count_buckets.count. Если количество сегментов, созданных с помощью date_histogram, превышает 30, то сегмент (против compId) следует сохранить, иначе его следует исключить. Другими словами, вы хотите выбрать сегмент на основе условия. Для этого вы уже добавили агрегацию stats_bucket, чтобы получить количество сегментов. Теперь это можно использовать в качестве параметра для агрегации селектора сегментов . Агрегация селектора ковшей точно делает то, что требуется.

Просто добавьте агрегацию bucket_selector к вашему запросу, как показано ниже:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": {
        "terms": {
          "compId": [
            111,
            112
          ]
        }
      },
      "must": {
        "range": {
          "dateCreated": {
            "from": "2016-04-01",
            "to": "2019-03-31",
            "format": "yyyy-MM-dd"
          }
        }
      }
    }
  },
  "aggs": {
    "grp_company": {
      "terms": {
        "field": "compId"
      },
      "aggs": {
        "data_per_month": {
          "date_histogram": {
            "field": "dateCreated",
            "interval": "month"
          }
        },
        "count_buckets": {
          "stats_bucket": {
            "buckets_path": "data_per_month._count"
          }
        },
        "bucket_filter": {
          "bucket_selector": {
            "buckets_path": {
              "bucket_count": "count_buckets.count"
            },
            "script": "params.bucket_count > 30"
          }
        }
      }
    }
  }
}
1 голос
/ 26 апреля 2019

Да, вы можете использовать параметр min_doc_count (имеющий значение 30) при агрегировании терминов согласно вашему требованию. min_doc_count - самый эффективный способ получить такой результат. Даже если вам не нужно использовать count_buckets в этом случае, то же самое с одной агрегацией, следуйте приведенному ниже коду:

...
...
"aggs": {
        "grp_company": {
            "terms": {
                "field": "compId",
                "min_doc_count": 30
            },
            "aggs": {
                "data_per_month": {
                    "date_histogram": {
                        "field": "dateCreated",
                        "interval": "month"
                    }
                },
                "count_buckets": {
                    "stats_bucket": { --> I am getting the count of buckets here
                        "buckets_path": "data_per_month._count"
                    }
                }
            }
        }
    }

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

Для дальнейшего понимания вы можете прочитать Официальную документацию Elastic здесь: min_doc_count Setting

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...