Graph 如何获取从一个节点到另一个节点的路径,包括所有其他节点以及它们之间的关系

Graph 如何获取从一个节点到另一个节点的路径,包括所有其他节点以及它们之间的关系,graph,neo4j,cypher,path-finding,Graph,Neo4j,Cypher,Path Finding,我在Neo4j中设计了一个模型,以获得从一个站点到另一个站点的路径,包括涉及的平台/支腿。模型如下图所示。基本上,我需要一个查询将我从NBW带到RD。还显示了涉及的平台和支腿。我正在努力回答这个问题。我没有结果。感谢别人的帮助 以下是我的发言: MATCH p = (a:Station)-[r:Goto|can_board|can_alight|has_platfrom*0..]->(c:Station) WHERE (a.name='NBW') AND c.name='RD' RET

我在Neo4j中设计了一个模型,以获得从一个站点到另一个站点的路径,包括涉及的平台/支腿。模型如下图所示。基本上,我需要一个查询将我从NBW带到RD。还显示了涉及的平台和支腿。我正在努力回答这个问题。我没有结果。感谢别人的帮助

以下是我的发言:

MATCH p = (a:Station)-[r:Goto|can_board|can_alight|has_platfrom*0..]->(c:Station)
WHERE (a.name='NBW') 
AND c.name='RD' 
RETURN p
型号:

您的查询是定向的
-->
,并且并非两个站点之间的所有关系都朝同一方向运行。如果删除关系方向,将得到一个结果

一旦你有了一个结果,我想这样的东西可以让你在正确的方向上,从结果路径中提取特定的细节,一旦你得到了工作

基本上,我假设您感兴趣的所有内容都在返回的路径中,您只需要过滤掉返回的不同部分

正如@InverseFalcon指出的,这个查询应该限制在一个更大的图中,否则它很容易跑掉

MATCH p = (a:Station)-[r:Goto|can_board|can_alight|has_platfrom*0..]-(c:Station) 
WHERE (a.name='NBW') 
AND c.name='THT' 
RETURN filter( n in nodes(p) WHERE 'Platform' in labels(n)) AS Platforms

如注释中所述,在Cypher中,不能使用对某些关系使用不同方向的定向变长关系

但是,我们刚刚添加了基于关系序列进行扩展的功能。您可以尝试一下:

MATCH (start:station), (end:station)
WHERE start.name='NBW' AND end.name='THT'
CALL apoc.path.expandConfig(start, {terminatorNodes:[end], limit:1,
  relationshipFilter:'has_platform>, can_board>, goto>, can_alight>, <has_platform'}) YIELD path
RETURN path 

如果从查询中删除关系类型,是否会得到结果?如果是这样,你能一次一个地把它们加回去直到你停止得到结果吗?不,我没有得到任何结果。我认为问题是因为这两个红圈(站)之间没有关系,我是用它们来匹配的!?啊,我明白问题了,你的问题是直接的。取下问号中的方向。但是如果我想让它被定向呢?那么你需要让模型中的所有路径都指向那个方向。如果您需要能够在两个方向上进行查询,那么您可能会在节点之间的关系上加倍。我想这最终取决于你的型号。谢谢你的回答。但是,当这两个红色圆圈(station)之间没有关系时,查询应该如何返回结果?小心该查询,因为结果不受限制,这可能会挂在更大的图形上。如果您需要多个路径(不希望使用
限制
),但不希望查询挂起,您可能希望添加
maxLevel
,并将其设置为到达终点站的预期跳数的倍数(本例中为5)嗨,谢谢你的回答。我更新了我的模型,并添加了一个名为“RD”的新站点来测试上述查询。它仅从“NBW”到“THT”起作用,而不是从“NBW”到“RD”。正如您在上面更新的图像中看到的。不知道还缺什么------------------------------匹配(start:station),(end:station)其中start.name='NBW'和end.name='RD'调用apoc.path.expandConfig(start,{terminatorNodes:[end],relationshipFilter:'has_platform>,can_board>,goto>,can_alight>,您好,现在它以任何方式都不工作。甚至不能从“NBW”工作到“THT”这是一个更改大小写的问题。在第一个图像中,您有
:Station
节点,并且有
:Goto
关系,所有其他节点标签和关系类型都是小写的。在新图像中(和图形数据),您更改为使用小写的
:station
标签和
:goto
关系。Neo4j区分大小写,您需要保持大小写一致。绝对正确。非常感谢。
MATCH (start:station), (end:station)
WHERE start.name='NBW' AND end.name='RD'
CALL apoc.path.spanningTree(start, {terminatorNodes:[end], limit:1,
  relationshipFilter:'has_platform>|can_board>|goto>|can_alight>|<has_platform'}) YIELD path
RETURN path