简化在节点

时间:2017-09-20 16:41:29

标签: neo4j cypher

我有一个查询

MATCH (x:NodeA)-[]-(y:NodeB)-[]-(z:NodeC)
RETURN DISTINCT z.property.   

节点x和节点z有很多实例,但只有少数节点y,这意味着许多路径在y处通过同一节点。
有没有办法简化查询,从而减少neo检查的路径数量,因为我不关心最终z节点来自哪个x节点?
该查询目前有大约2.8亿个路径,但y处只有约50个节点。

2 个答案:

答案 0 :(得分:1)

由于您实际上并不关心NodeA,因此只需找到NodeB - NodeC对,其中NodeB与任何NodeA相关联。否则,您的结果会乘以NodeA s的数量(在DISTINCT过滤掉之前):

MATCH (y:NodeB)-[]-(z:NodeC)
WHERE (:NodeA)-[]-(y)
RETURN DISTINCT z.property

答案 1 :(得分:1)

替代Tezra的Cypher,您可以使用如下查询:

MATCH (z:NodeC)
WHERE (:NodeA)-[]-(:NodeB)-[]-(z)
RETURN z.property

这里的主要优点是您不需要使用DISTINCT。但是,使用PROFILE查看每个查询的执行计划并选择最适合您的模式的计划非常重要。