Graph Cypher中的路径属性

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:'

我在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:'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”节点