我有一个与关系类型相关联的节点树:PARENT_OF
和NEXT
,并且需要将从根开始的所有节点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>
感谢。
答案 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