Применить составную агрегацию к отфильтрованным данным - PullRequest
2 голосов
/ 31 марта 2020

Я использую «Composite Aggregation», так как в моем случае требуется «Pagination» для сегментов, возвращаемых Aggregation, так как количество возвращаемых сегментов может быть огромным.

Мне также нужно запустить «Составное агрегирование» в заданном c диапазоне времени, для этого я использую фильтр «диапазона». Тем не менее, ответ отasticsearch не содержит никаких данных в «агрегации». Массив "hit" содержит правильные данные в соответствии с фильтром. Меня интересует только результат «Составной агрегации».

Я что-то упустил?

Запрос как ниже:

GET <my-index>/_search 
{
  "query" : {
    "range" : {
      "@timestamp" : {
        "gte" : "2020-03-29T14:53:42.068Z",
        "lt" : "2020-03-29T15:53:42.068Z"
      }
    }
  },
  "aggs" : {
    "uniq_userids": {
      "composite" : {
        "size": 100,
        "sources" : [
          { "by_userid": { "terms" : { "field": "userid.keyword" } } }
        ]
      }
    } 
  } 
}

Ответ следующий:

{
  "took" : 10,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 12,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
          ...
    ]
  },
  "aggregations" : {
    "uniq_userids" : {
      "buckets" : [ ]
    }
  }
}

Ожидаемый результат в элементе агрегации

  "aggregations" : {
    "uniq_userids" : {
      "after_key" : {
        "by_userid" : "user4"
      },
      "buckets" : [
        {
          "key" : {
            "by_userid" : "user1"
          },
          "doc_count" : 3
        },
        {
          "key" : {
            "by_userid" : "user2"
          },
          "doc_count" : 3
        },
        {
          "key" : {
            "by_userid" : "user3"
          },
          "doc_count" : 2
        }
      ]
    }
  }

Пример документа

      {
        "_index": "xxxxxxxxxxx",
        "_type": "doc",
        "_id": "fpFcKXEB9-HOO02nOoEG",
        "_score": 1,
        "_source": {
          "message": "xxxxxxxxxxx",
          "input": {
            "type": "log"
          },
          "tags": [
            "beats_input_codec_plain_applied"
          ],
          "offset": 56422597,
          "logday": "2020-03-29",
          "userid": "user1",
          "source": "xxxxxxxxxxx",
          "@version": "1",
          "prospector": {
            "type": "log"
          },
          "Micro_time": "2020-03-29 14:54:01.366719",
          "logtime": "14:54:01.366719",
          "@timestamp": "2020-03-29T14:54:01.366Z"
        }
      }
...