Моя команда владеет несколькими приборными панелями и рассматривает возможность перехода на Elasticsearch для консолидации стеков программного обеспечения. Один тип общих диаграмм, которые мы раскрываем, подобен «Каков ожидающий рабочий процесс к концу каждого дня?». Вот некоторые примеры данные:Вложенный запрос в Elasticsearch?
day workflow_id version status
20151101 1 1 In Progress
20151101 2 1 In Progress
20151102 1 2 In Progress
20151102 3 1 In Progress
20151102 4 1 In Progress
20151102 2 2 Completed
20151103 1 3 Completed
20151103 3 2 In Progress
20151104 3 3 Completed
20151105 4 2 Completed
Каждый раз, когда что-то изменилось в рабочем процессе, новая запись вставляется, что может или не может изменить статус. Запись с max (version) - это самые последние данные для workflow_id.
Цель состоит в том, чтобы показать график, который показывает общее количество рабочих процессов «Выполняется» и «Завершено» в конце каждого дня. Это должно учитывать только запись, которая имеет самый большой номер версии до дня. Это может быть сделано в SQL с вложенными запросами:
with
snapshot_dates as
(select distinct day from workflow),
snapshot as
(select d.day, w.workflow_id, max(w.version) as max_version
from snapshot_dates d, workflow w
where d.day >= w.day
group by d.day, w.workflow_id
order by d.day, w.workflow_id)
select s.day, w.status, count(1)
from workflow w join snapshot s on w.workflow_id=s.workflow_id and w.version = s.max_version
group by s.day, w.status
order by s.day, w.status;
Здесь ожидается выход из запроса:
day,status,count
20151101,In Progress,2
20151102,Completed,1
20151102,In Progress,3
20151103,Completed,2
20151103,In Progress,2
20151104,Completed,3
20151104,In Progress,1
20151105,Completed,4
Я еще новичок в Elasticsearch и интересно, если Elasticsearch может сделать подобный запрос без использования приложения чтобы правильно определить отображение и запрос. В более общем плане, какова наилучшая практика для решения этой проблемы с использованием Elasticsearch?
Вы должны использовать агрегацию в зависимости от даты. вы можете проверить https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-daterange-aggregation.html эту ссылку. – hkulekci
Вы должны реверсировать свои данные в поиск elastics. Если у вас есть структурированные данные, вы можете создать сопоставление, это очень просто ваши запросы. Несколько раз запрос elasticsearch рушится, если одни и те же данные имеют другой тип. – hkulekci
Трудность здесь в том, что не будет записи для каждого рабочего потока каждый день. Например, в 20151104 нет записи для идентификатора 4 рабочего потока, он должен использовать запись на 20151102, поскольку это самая обновленная версия в то время. Однако для 20151105 следует использовать запись на 20151105 с версией 2. – Jichao