如何在CYPHER查询中过滤掉循环

时间:2015-03-01 10:41:10

标签: neo4j cypher

我正在玩网络技术的库存。 我得到了(http://i.stack.imgur.com/3dCeL.png):

  • 网卡(绿色
  • 开关(蓝色)
  • 端口(红色)

端口是PART_OF网卡或交换机。端口通过' CON'双向连接。

如果我现在想要从HCA1到HCA2的路径,我不仅要走这条路 hca1->hca1_port->sw_in_port->sw->sw_out_port->hca2_port->hca2还有通过switch0和switch1的循环。

我的查询如下:

START a=node:node_auto_index(name="Hca1"),  
b=node:node_auto_index(name="Hca2")
MATCH p=a-[r*2..15]-b
return a,b,p`

结果:http://i.stack.imgur.com/bKjLP.png

如何在没有周期的情况下查询直线路径?任何人吗?

干杯 基督教

2 个答案:

答案 0 :(得分:1)

啊,很酷的allShortestPaths似乎对我有用。

START a=node:node_auto_index(name="Hca1"),
      b=node:node_auto_index(name="Hca2")
MATCH p= allShortestPaths((a)-[*]-(b))
return a,b,p

导致图表...

enter image description here

谢谢你们。

答案 1 :(得分:1)

哦,最短的路径也在起作用。

如果我推入更大的拓扑(CLOS,它有很多allShortestPaths

,那么allShortestPaths将会非常大
START a=node:node_auto_index(name="Hca1"),       
      b=node:node_auto_index(name="Hca6")
MATCH p= allShortestPaths((a)-[*]-(b))
RETURN a,b,p

返回:enter image description here

只有其中一个:

MATCH (start:HCA { name:"Hca1" }),(end:HCA { name:"Hca6" }),
p = shortestPath((start)-[*..15]-(end))
RETURN p

结果:enter image description here