Мониторинг изменения значения поля с течением времени

Добрый день, у меня есть индекс с примерно такой структурой:

{
	"timestamp": "ts1",
	"Status": "Available",
         "serviceId": "1"
},
{
        "timestamp": "ts2",
        "Status": "Unavailable",
         "serviceId": "1"
},
{
        "timestamp": "ts3",
        "Status": "Unavailable",
         "serviceId": "1"
},
{
        "timestamp": "ts4",
        "Status": "Unavailable",
         "serviceId": "1"
},
{
        "timestamp": "ts5",
        "Status": "Available",
         "serviceId": "1"
}

И моя задача состоит в том, чтобы понять в течении какого времени сервис с таким то Id был доступен или недоступен. Я не совсем понимаю какую комбинацию агрегаций тут можно применить. Т.е. я понимаю, что в начале будет фильтр по serviceId или terms aggregation по нему же, но вот что можно применить дальше. Буду очень признателен за любую помощь

Что нужно в качестве конечного результата?

Список значений с моментом изменения поля status или просто список интервалов в течении которых status был Available или Unavailable

Каких значений?

Это можно получить фильтром по serviceId и сортировкой по времени.

Значений timestamp. Сортировка по времени даст мне только записи в порядке возрастания времени, что тоже нужно, но саму задачу никак не решает. Нужно каким-то образом получить только моменты времени, когда status меняется. Т.е. например: ts1 - available, ts4 - unavailable, ts7 - available и т.д.

Теперь понял. Это сложно сделать с помощью elasticsearch c данными в их текущем виде. Основная проблема в том, что в связи с распределенной архитектурой elasticsearch соседние (по времени) состояние могут хранится на разных узлах и любые операции над упорядоченными данными сложны и трудоемки. 2 основных способа - 1) переделать данные так, чтобы пары Unavailable/available хранились в одной записи, которая бы обновлялась по мере изменения значения либо 2) вытаскивать упорядоченный список и обрабатывать его в вашем приложении.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.