检测节点之间不必要的显式关系

时间:2019-04-02 14:03:33

标签: cypher redisgraph

我具有组节点结构,其中一个节点继承了前一个节点的权限

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

但是结构不干净,有时我有 manager 的2条边 到 poweruser ,然后再次到 poweruser

暗示的 user
Manager ---Implies---> PowerUser ---Implies---> User
        ---Implies----------------------------> User

我该如何查询节点以判断我已经具有隐式关系并且不需要额外的显式关系

1 个答案:

答案 0 :(得分:1)

看来PowerUser是您结构中的标签。您可以编写一个变长遍历[1],该遍历考虑任何长度的路径,只要此标签出现在某处即可:

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

将是实现此操作的最广泛遍历,将连接到PowerUser标签的任何节点匹配0个或更多边。

鉴于PowerUser是允许的,但是,似乎更合适的设计是将其视为属性。由于Cypher没有模式,因此属性不会限制在特定的标签范围内,因此可以在带有ManagerUser标签的节点上进行设置和过滤。这种方法将允许更简洁的表达式,例如:

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

如果这与您的用例不符,请随时提供有关图形结构的更多详细信息!

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