匹配节点与变量和设置多种类型的关系

时间:2017-04-09 02:04:09

标签: neo4j cypher

我有一个与关系类型相关联的节点树:PARENT_OFNEXT,并且需要将从根开始的所有节点n匹配到变量深度{{ 1}}。节点num需要是通过n到达的直接子节点。

(深度仅通过类型PARENT_OF

的关系递增

我写了以下查询:

PARENT_OF

但效率低,因为它首先匹配所有深度的路径,然后过滤掉所有太长的路径(可能非常长且太多)。我需要一个只能使用错误语法设置深度的查询,例如以下示例:MATCH p=(:HeadArgument)-[:PARENT_OF|:NEXT*]->(node) WHERE ()-[:PARENT_OF]->(node) AND size(filter(x IN relationships(p) WHERE type(x) = 'PARENT_OF')) <= {num} RETURN node (如正则表达式添加变量路径):()-[(:NEXT*|:PARENT_OF)*..{num}]-()或其他方式,如果您知道其他任何方式。< / p>

感谢。

1 个答案:

答案 0 :(得分:1)

需要接收终端节点。然后是从根到它们的路径。然后沿着这些路径,计算所有适当的节点:

MATCH (R:HeadArgument)
MATCH (E) WHERE NOT (E)-[:NEXT|PARENT_OF]->()
WITH R, E
MATCH path = (R)-[:NEXT|PARENT_OF*]->(E)
WITH relationships(path) as edges
WITH REDUCE(nds=[], e in edges | 
            nds + CASE WHEN size(nds)<={num} AND type(e)='PARENT_OF' 
                       THEN endNode(e) 
                       ELSE [] 
                  END
     ) as nds
UNWIND nds as n
RETURN distinct n as node