У меня есть иерархические данные Elasticsearch, которые я "нормализовал" в документы следующего сопоставления:
_id | custom_id | parent_id | text | value
Где _id
- это автоматически сгенерированный идентификатор Elasticsearch, custom_id
- уникальное целое число, которое я назначаю иparent_id
действует как внешний ключ, ссылаясь на custom_id
документа, когда текущий документ является дочерним по отношению к указанному.Пример двух документов может выглядеть следующим образом:
abc | 1 | -1 | foo | 123
def | 2 | 1 | bar | 456
Каждый документ имеет ровно одного (любого parent_id
> 0) или не имеет (parent_id
= -1) родителя.Вложение может быть сколь угодно глубоким, но всегда ограниченным, и, скорее всего, будет несколько родителей высшего уровня.
Моя цель - запросить данные для двух ответов:
Учитывая custom_id
, каковы все родители (то есть прямые родители, дедушка, бабушка, ...) этого документа?
Учитывая любой результат запроса, примените фильтр, который используется только для потомковданное custom_id
(которое само по себе не обязательно должно быть частью исходного результата запроса) соответствует.
Elasticsearch join
тип данных не применим, потому что в моем случае один документможет выступать в роли родителя и ребенка одновременно.Тип данных nested
не позволяет выполнять такой поиск.
Чтобы было ясно, я хочу вернуть результаты запроса в Kibana.Написание сценария, который возвращает по одному документу за раз, рекурсивный обход по parent_id
, безусловно, возможен.Что от меня требуется, чтобы сделать эту работу в Кибане и представить результаты на странице «Обнаружение» или в визуализации (я думаю, что таблица данных подходит)?