Есть ли способ в neo4j хранить подобные подграфы как новые узлы для построения ADT поверх данных графа? - PullRequest
0 голосов
/ 24 апреля 2019

Я довольно новичок в neo4j, и на самом деле это мой первый вопрос о переполнении стека, поэтому, пожалуйста, будьте осторожны :)

Есть ли элегантное решение, как сгруппировать подграфы в новые узлы и использовать эти узлы в качестве гражданина первого класса?в то время как все еще можно расширить эти узлы в их прежнюю структуру подграфа?

Справочная информация: Моя цель состоит в создании некой системы типов на графе:

У меня есть определенные подграфы в моем графе neo4j-базы данных, которые удовлетворяют определенному общему шаблону (комбинации определенных тегов, свойств и ребер).Давайте назовем их {s1, s2, s3, s4}.

Теперь я хочу сгруппировать эти подграфы с этим определенным шаблоном (назовем его p1) в новые узлы как экземпляры нового типа t1.Я хочу тогда иметь возможность запрашивать узлы типа T1.Ребра этих новых узлов будут тогда первыми ребрами, соединяющими подграф с остальной частью графа.Тем не менее я хочу иметь возможность расширить эти узлы в их прежнюю структуру подграфа.Также я хочу иметь возможность сгруппировать другой подграф s5 (возможно, даже содержащий некоторые части s1), который формирует шаблон p2, в новый узел типов t2.

Тогда было бы также неплохо сгруппировать t1 и t2в тип t3 и т. д. для построения иерархии типов абстрактных типов данных.

Мое решение до сих пор состояло бы в создании "узла контейнера", который указал ребра для моих подграфов-узлов, а затем подключил эти контейнерыузлы таким же образом, чтобы "тип узлов".Затем подключите узлы типов к иерархии типов.Но мне кажется, это довольно хакерский способ сделать это.Может быть, есть лучший подход.

Существует ли встроенное решение или элегантный способ для достижения этой функциональности (желательно в neo4j, но также и в других базах данных графов)?

1 Ответ

0 голосов
/ 25 апреля 2019

Кажется, вы можете просто добавить узел метка (например, "T1") к каждому узлу, который принадлежит подгруппе.

Узел может иметь несколько меток, поэтому вы можетедобавьте больше меток, если узел принадлежит иерархии типов.

С метками вы можете легко найти узлы, которые принадлежат определенной подгруппе.Например, чтобы найти все узлы в «T1»:

MATCH (n:T1)
RETURN n

Существующие отношения не должны изменяться.

...