Cypher可变长度路径优化

时间:2016-07-19 21:09:05

标签: neo4j cypher

我的图表结构如下:

Sample graph

我需要直接(红色路径)或通过他们:Treasure(蓝色)返回所有:FOUND_BY不是:User超过1 :Group的所有回报路径)。

我的密码

MATCH (t:Treasure)
// WHERE with other conditions
WITH t, SIZE((t)-[:FOUND_BY|MEMBER_OF*1..2]-(:User))) as finders
WHERE finders < 2
RETURN t

返回我正在寻找的节点,但是花费了大量时间来扩展该变量路径。 我怎样才能优化这个cypher,摆脱变量路径,但保持相同的结果?

1 个答案:

答案 0 :(得分:0)

好像你可以做到

MATCH (t:Treasure)
WHERE size((t)-[:FOUND_BY]->()) < 2
RETURN t

您可以省略[:FOUND_BY]关系另一侧的标签,以便考虑这两种情况。如果我误解了,请告诉我。

编辑:根据您的评论,我认为避免可变长度路径的最佳方法是:

MATCH (t:Treasure)
WHERE size((t)-[:FOUND_BY]->(:User)) + 
      size((t)-[:FOUND_BY]->(:Group)<-[:MEMBER_OF]-(:User)) < 2
RETURN t