Elasticsearch: агрегирование с фильтрацией по метке времени

#elasticsearch #kibana #elasticsearch-aggregation

#elasticsearch #kibana #elasticsearch-агрегация

Вопрос:

Мне нужно получить список различных идентификаторов для определенного дня. Я пытаюсь использовать «Агрегации» с «фильтрацией». Пробовал несколько способов, но это не работает. Какой правильный формат?

   {
    "size": "1000",
    "_source": ["Id"],
    "query": {
      "range": {
        "@timestamp": {
          "gte": "2020-10-20T00:00:00",
          "lt": "2020-10-21T00:00:00"
        }
      }
    },
     "aggs": {
      "ids": {
        "terms": { "field": "Id.keyword" }
      }
    }
  }
  

Другой способ, который я пробовал:

   {
    "size": "1000",
    "_source": ["Id"],
     "aggs": {
      "ids": {
        "filter": {
          "range": {
            "@timestamp": {
              "gte": "2020-10-20T00:00:00",
              "lt": "2020-10-21T00:00:00"
            }
          }
        },
        "terms": { "field": "Id.keyword" }
      }
    }
  }
  

Вот сопоставление @timestamp:

 "@timestamp": {
   "type": "date",
   "format": "dateOptionalTime"
 }
  

Комментарии:

1. Не могли бы вы добавить свое сопоставление? Спасибо!

2. Можете ли вы уточнить, что «не работает»? Есть какая-нибудь ошибка, которой нужно поделиться?

3. Фильтрация не работает. Он возвращает строки со значением ‘timestamp’: 18 октября 2020, 07:59:32.842

Ответ №1:

На самом деле, первый вариант почти правильный. Вам просто нужно установить размер в 0 в запросе, удалить _source , поскольку он вам не понадобится, и установить размер в 1000 в агрегации терминов:

 {
  "size": "0",
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2020-10-20T00:00:00",
        "lt": "2020-10-21T00:00:00"
      }
    }
  },
  "aggs": {
    "ids": {
      "terms": {
        "field": "Id.keyword",
        "size": 1000
      }
    }
  }
}
  

Комментарии:

1. Фильтрация не работает. Он возвращает строки со значением ‘timestamp’: 18 октября 2020, 07:59:32.842

2. Каково отображение вашего индекса? В ответе у вас не должно быть никаких обращений, только агрегации. Как вы отправляете запрос?

3. Да, в ответе есть только идентификаторы, но когда я захожу в Kibana и фильтрую по одному из идентификаторов, чтобы убедиться, что он работает, все строки для этого идентификатора относятся к 18 октября.

4. Не уверен, что вы подразумеваете под «Каково отображение вашего индекса?» Как бы я это нашел? Извините, относительно новичок в ELK stack.

5. Что вы получаете при запуске GET your-index-name/_mapping в Kibana Dev Tools?