Обнаружить ненужную явную связь между узлами - PullRequest
1 голос
/ 02 апреля 2019

У меня есть структура группы узлов, где узел наследует разрешения от предыдущего узла

Manager ---Implies---> PowerUser ---Implies---> User

Но структура не чистая, и иногда у меня есть 2 ребра от manager poweruser и снова пользователь , что уже подразумевается poweruser

Manager ---Implies---> PowerUser ---Implies---> User
        ---Implies----------------------------> User

Как я могу запросить узлы, чтобы определить, что у меня уже есть неявное отношение и что мне не нужно дополнительное явное отношение

1 Ответ

1 голос
/ 20 мая 2019

Похоже, PowerUser - это ярлык в вашей структуре.Вы можете написать обход переменной длины [1], который рассматривает пути любой длины до тех пор, пока эта метка где-то появляется:

MATCH (entity)-[*0..]->(:PowerUser)

Будет самым широким обходом для достижения этого, соответствуялюбой узел, связанный с меткой PowerUser 0 или более ребрами.

Учитывая, что PowerUser является разрешением, тем не менее, кажется, что более подходящим вариантом было бы рассматривать его как свойство.Поскольку Cypher не содержит схемы, свойства не ограничиваются конкретными метками, поэтому его можно устанавливать и фильтровать на узлах с метками Manager или User.Этот подход позволит использовать более краткие выражения, такие как:

MATCH (entity {PowerUser: true})-[]->()

Если это не соответствует вашему варианту использования, не стесняйтесь предоставить более подробную информацию о структуре вашего графа!

  1. https://oss.redislabs.com/redisgraph/commands/#variable-length-relationships
...