Поиск 2 записей ES, которые произошли с интервалом менее X минут - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть индекс ES с событиями (журналами), и я хочу найти случаи, когда есть 1 событие типа A, за которым следует 1 событие типа B в течение следующих 5 минут. Я довольно новичок в ES, поэтому я уверен, что это лучший способ достичь этого, я думаю, что агрегирование может быть хорошим способом, но я не вижу ни одного, который бы соответствовал этим потребностям.

Пример :
У меня есть следующие события

{ id: 1, timestamp: "2019-11-08 10:00", type: "A" },
{ id: 2, timestamp: "2019-11-08 10:01", type: "B" },
{ id: 3, timestamp: "2019-11-08 10:07", type: "A" },
{ id: 4, timestamp: "2019-11-08 10:10", type: "B" },
{ id: 5, timestamp: "2019-11-08 10:20", type: "B" }

Я хотел бы найти способ вывода «коррелированных» событий, таких как (формат вывода здесь не импортируется, я могу адаптироватьпри необходимости имеет значение только информация о «корреляции»)

{ "id" : [1, 2] },
{ "id" : [3, 4] }

, поскольку события 1 и 2 произошли в течение 5 минут друг от друга, а также 3 и 4. Событие 5 не «связано» с каким-либо другим событием, поэтому его нет в результатах

1 Ответ

1 голос
/ 08 ноября 2019

Для начала, вы можете использовать date_histogram агрегацию .

Сначала индексируйте некоторые документы:

POST test/_doc/_bulk
{"index":{"_id": "1"}}
{ "id": 1, "timestamp": "2019-11-08T10:00:00", "type": "A" }
{"index":{"_id": "2"}}
{ "id": 2, "timestamp": "2019-11-08T10:01:00", "type": "B" }
{"index":{"_id": "3"}}
{ "id": 3, "timestamp": "2019-11-08T10:07:00", "type": "A" }
{"index":{"_id": "4"}}
{ "id": 4, "timestamp": "2019-11-08T10:09:00", "type": "B" }
{"index":{"_id": "5"}}
{ "id": 5, "timestamp": "2019-11-08T10:20:00", "type": "B" }

Затем выполните запрос, который агрегирует документы на5-минутные интервалы:

POST test/_search
{
  "size": 0,
  "aggs": {
    "history": {
      "date_histogram": {
        "field": "timestamp",
        "interval": "5m",
        "min_doc_count": 1
      },
      "aggs": {
        "hits": {
          "top_hits": {
            "_source": false
          }
        }
      }
    }
  }
}

Вы увидите ожидаемые результаты. В первом пакете вы увидите документы 1 и 2, во втором пакете документы 3 и 4 и документ 5 в третьем пакете.

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