Группируйте документы с одинаковым внутренним идентификатором, а затем объединяйте их в группы по количеству совпадений. - PullRequest
0 голосов
/ 01 июля 2019

У меня есть индекс, называемый «события», где каждый документ является отдельным событием. События генерируются устройствами, которые имеют внутренние идентификаторы.

Я хочу сгруппировать события по «deviceId», а затем агрегировать их по количеству сгенерированных ими событий. Контейнеры могут быть "0-10", если конкретное устройство генерирует от 0 до 10 событий (документов), и "10-100", "100-1000", "1000+" соответственно.

Кажется, мне нужны "конвейерные агрегаты", но, поскольку я совершенно новичок в упругости, это выглядит слишком сложно, и я не могу найти правильный запрос для этого. Уже перепробовал много разных комбинаций с разным уровнем вложенности.

В результате я не хочу подсчитывать, сколько устройств представлено в каждой группе этого диапазона. DeviceId также должен быть доступен внутри корзины, если я захочу получить список устройств или конкретные сведения об устройстве (оба будут новыми запросами и не связаны с этим).

Вот пример кода, который наверняка не работает:

GET events/_search { "size": 0,  "aggs": {
"perMonth": {
  "date_histogram": {
    "field": "timestamp",
    "interval": "1M",
    "min_doc_count": 0
  },
  "aggs": {
    "byDevice": {
      "terms": {
        "field": "deviceId"
      }
    },
    "0-10": {
      "bucket_script": {
        "buckets_path": {
          "count": "byDevice>_count"
        },
        "script": "params.count <= 10"
      }
    },
    "10-100": {
      "bucket_script": {
        "buckets_path": {
          "count": "byDevice>_count"
        },
        "script": "params.count > 10 && params.count >= 100"
      }
    },
    "100-1000": {
      "bucket_script": {
        "buckets_path": {
          "count": "byDevice>_count"
        },
        "script": "params.count > 100 && params.count >= 1000"
      }
    },
    "1000+": {
      "bucket_script": {
        "buckets_path": {
          "count": "byDevice>_count"
        },
        "script": "params.count > 1000"
      }
    }
  }
}
}
}

В результате я не хочу получить:

{ "0-10": { doc_count: n, docs: [...]}, "10-100": { doc_count: n, docs: [...]}, "100-1000": { doc_count: n, docs: [...]}, "1000+": { doc_count: n, docs: [...]} }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...