Graph 如何获得某一关系类型上的图中的所有节点

Graph 如何获得某一关系类型上的图中的所有节点,graph,neo4j,iteration,cypher,nodes,Graph,Neo4j,Iteration,Cypher,Nodes,我已经建立了一个小图表,其中所有屏幕都连接在一起,屏幕的流量根据系统/用户的不同而变化。因此,系统/用户是关系类型 我希望从开始屏幕中获取与特定关系链接的所有节点。我不关心深度,因为我不知道图形的深度。 类似于这样,但是下面的查询需要花费很长时间才能获得结果,并且返回的连接不匹配属性{path:'CC'} 匹配(n:screen{isStart:true})-[r:NEXT*0..{path:'CC'}]-() 返回r,n一些建议: 确保已为:屏幕(isStart)创建索引: 确实要包括0长度

我已经建立了一个小图表,其中所有屏幕都连接在一起,屏幕的流量根据系统/用户的不同而变化。因此,系统/用户是关系类型

我希望从开始屏幕中获取与特定关系链接的所有节点。我不关心深度,因为我不知道图形的深度。 类似于这样,但是下面的查询需要花费很长时间才能获得结果,并且返回的连接不匹配属性{path:'CC'}

匹配(n:screen{isStart:true})-[r:NEXT*0..{path:'CC'}]-() 返回r,n

一些建议:

  • 确保已为
    :屏幕(isStart)
    创建索引:

  • 确实要包括0长度的路径吗?如果没有,则从查询中取出
    0..
  • 您没有指定:NEXT关系的方向性,因此DB必须同时查看传入和传出:NEXT关系。如果合适,请指定方向性

  • 要最小化结果行数,请添加一个
    WHERE
    子句,以确保当前路径不能进一步扩展

  • 下面是一个建议查询,它结合了最后3个建议(根据您的需要进行修改):

    CREATE INDEX ON :screen(isStart);
    
    MATCH (n:screen {isStart:true})-[r:NEXT* {path:'CC'}]->(x)
    WHERE NOT (x)-[:NEXT {path:'CC'}]->()
    return r,n;