Рекурсивные запросы в Elasticsearch / Kibana - PullRequest
0 голосов
/ 13 июня 2019

У меня есть иерархические данные 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, безусловно, возможен.Что от меня требуется, чтобы сделать эту работу в Кибане и представить результаты на странице «Обнаружение» или в визуализации (я думаю, что таблица данных подходит)?

1 Ответ

0 голосов
/ 13 июня 2019

Это то, что вам нужно решать по-разному при работе с базами данных на основе документов (эластичные, монго и т. Д.). В эластичном поиске нет связи до или рекурсии ...

Но в документации mongo db есть хорошая документация для наиболее распространенных решений этой проблемы, но они легко адаптируются для эластичного поиска. Все они имеют свои плюсы и минусы. В моем прошлом решения, основанные на «вложенном наборе» или «материализованном пути», очень хорошо работали для связанных или древовидных структур.

https://docs.mongodb.com/manual/applications/data-models-tree-structures/

Веселись!

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