Обнаружение ненужной явной связи между узлами

#cypher #redisgraph

#шифр #повторный график

Вопрос:

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

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

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

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

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

Ответ №1:

Похоже, 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