graph - Neo4J Cypher - 寻找两条路径的交汇点

标签 graph path neo4j cypher

这更多的是一个“如何做”的问题,可以有不同的方法,但试图找到解决此要求的最高效和最有效的方法。

我有一个图表,其中有充当 fork 节点的节点,即它们生成两条路径,这些路径稍后在其他节点相遇,我知道 fork 节点的节点 ID 和属性(下面示例中的节点 A)并想知道两条路径相交的节点(下面例子中的节点 B)。

注意 - 这些路径的长度可以是可变的,即一个路径可能有 6 个节点,而另一个路径只有 2 个节点,例如

NodeA -[]-> Node 1 -[]-> Node 2 -[]-> Node 3 -[]-> Node 4 -[]-> Node 5 -[]-> Node 6 -[]-> Node B -[]-> Node C -[]-> Node D -[]-> Node E
NodeA -[]-> Node 7 -[]-> Node 8 -[]-> Node B -[]-> Node C -[]-> Node D -[]-> Node E

因此,如果您看到节点 A 生成两条路径,最终在节点 B 再次相遇,那么我想让节点 B 知道节点 A,请建议我们如何在 Cypher 中做到这一点。

谢谢, 迪佩什

最佳答案

我假设您通过节点 aid 属性知道它,并且它是 1234。您也可能想在此处使用标签。我不确定您是否正在使用它们,所以我将它们排除在外。

MATCH
  (a)-[*1..10]->(b),
  (a)-[*1..10]->(b)
WHERE a.id = 1234
RETURN b

您也可以返回路径的长度,但这应该会得到结果。另请注意,您可以调整路径的最大长度(本例中为 10)作为查询性能的权衡(这取决于图表的结构)

编辑:

此外,如果这不起作用,您可能需要执行以下操作:

MATCH
  path1 = (a)-[*1..10]->(b),
  path2 = (a)-[*1..10]->(b)
WHERE a.id = 1234 AND path1 <> path2
RETURN b

关于graph - Neo4J Cypher - 寻找两条路径的交汇点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632962/

相关文章:

spring - 问题将 spring-data-neo4j 独立 spring 项目连接在一起

生成雷达图的PHP方案

c# - 为堆积条形图显示选择查询

d3.js - 如何可视化两个图之间的差异

architecture - Neo4j 实现评论

linux - 用户名更改后Anaconda路径断开

Java Prefuse 图将节点复制到另一个图

r - 从两个数据框中的数据生成多个序列图/散点图

java - netbeans、cmd 和 .bat 或 .cmd 中的路径差异

linux - solaris os设置路径和环境变量