Graph Cypher中的路径属性
我在Neo4j中有一个下图Graph Cypher中的路径属性,graph,neo4j,cypher,Graph,Neo4j,Cypher,我在Neo4j中有一个下图 (id:5,t:e)(id:2,t:b)-->(id:3,t:e) 现在,我从t:s的节点到具有t:e的节点的路径,这样,只有在中间只有白色列出的节点 因此,理想情况下,我需要一个查询只返回(0-->(4-->(5),而不返回(0-->(1-->(2-->)(3) 编辑:我忘了提到路径的长度可能是可变的:从0到可能的无穷大。这意味着我可能有任意数量的“t:w”节点 致以最诚挚的问候仅使用您提供的上述信息即可使用 MATCH p=({t:'s'})-->({t:'
(id:5,t:e)(id:2,t:b)-->(id:3,t:e)
现在,我从t:s
的节点到具有t:e
的节点的路径,这样,只有在中间只有白色列出的节点
因此,理想情况下,我需要一个查询只返回(0-->(4-->(5),而不返回(0-->(1-->(2-->)(3)
编辑:我忘了提到路径的长度可能是可变的:从0到可能的无穷大。这意味着我可能有任意数量的“t:w”节点
致以最诚挚的问候仅使用您提供的上述信息即可使用
MATCH p=({t:'s'})-->({t:'w'})-->({t:'e'}) RETURN p
当然,如果s
可以直接链接到e
,则需要使用可变长度关系匹配
MATCH p=({t:'s'})-[*0..1]->({t:'w'})-[]->({t:'e'})
RETURN DISTINCT p
编辑-任何长度的路径MATCH p=({t:'s'})-[*0..1]->({t:'w'})-[*]->({t:'e'})
RETURN DISTINCT p
要匹配任意长度的路径,请使用关系路径匹配中的*
运算符。通常最好对该匹配设置一些边界,例如*0..1
(长度为0到1)。您可以将任意一端打开*…6
(长度1到6)或*2..
(长度2到任意长度)
这样做的问题是,现在您无法保证中间节点中的节点类型(因此t:“b”
将被匹配)。为了避免这种情况,我认为您必须进行过滤
MATCH p=({t:'s'})-[*]->({t:'e'})
WHERE ALL (node IN NODES(p)
WHERE node.t = 's' OR node.t = 'w' OR node.t = 'e' )
RETURN p
结束编辑
您应该向节点引入标签,并使用关系类型进行遍历,因为Neo/Cypher将能够在这方面提供帮助。您还应该确保,如果您在属性上进行匹配,那么它们的索引是正确的。我忘了提到路径的长度可能是可变的:从0到可能的无穷大。这意味着我可能有任意数量的“t:w”节点