Cypher查询以检查节点连接

时间:2013-05-27 09:21:06

标签: neo4j cypher graph-databases

我是neo4j的新手,非常感谢你对此的帮助。

我在neo4j中创建了以下图表。

N1 N2 ---- ---- ---- N3 N4 N5 ---

n1,n2,n3,n4,n5都是节点 ---:relationship_type_1(REL)

现在给定任何节点集(按任何顺序),我想检查这些节点是否已连接。 例如。给定n1,n2,n3 ==>连接的。      给定n1,n3,n2,n4,n5 ==>连接。

我应该如何制定我的密码查询来检查连接?

即使我更改订单,以下查询仍然有效,

MATCH p=_1--_2--_3 
WHERE _1.name?="Node1" and ALL (n in nodes(p) 
  WHERE n.name IN ["Node1", "Node2", "Node4"]) 
RETURN nodes(p);

on http://console.neo4j.org/?id=xl8pnl

但如果我提供起始节点而不是使用_1,_2并更改顺序,那么它不会返回路径。 :(

http://console.neo4j.org/?id=xl8pnl 用于以下查询,

START p1=node(6),p2=node(5),p3=node(4) MATCH p=p1--p2--p3 
WHERE p1.name?="Node1" AND ALL (n IN nodes(p) WHERE n.name IN ['Node1' ,'Node3', 'Node2' , 'Node4']) 
RETURN nodes(p)

当节点以节点(6) - 节点(5) - 节点(4)顺序连接时,它不返回路径。

2 个答案:

答案 0 :(得分:2)

案例1:

找到2条路径

MATCH p=_1--_2--_3--_4 
WHERE _1.name?="Node1" and 
  ALL (n in nodes(p) 
    WHERE n.name IN ["Node1", "Node2", "Node3", "Node4"]) 
RETURN nodes(p);

在这里查看:

http://console.neo4j.org/?id=nn9yl6 在这种情况下,顺序不重要


案例2

(找不到路径)

使用节点1,2,4

MATCH p=_1--_2--_3 
WHERE _1.name?="Node1" and ALL (n in nodes(p) 
  WHERE n.name IN ["Node1", "Node2", "Node4"]) 
RETURN nodes(p);

在这里查看:

http://console.neo4j.org/?id=xl8pnl

答案 1 :(得分:2)

您需要通过明确列出它们来列出构成“连通性”的不同模式 console.neo4j.org/r/2w3poz

START p1=node(0),p2=node(4),p3=node(5) 
RETURN 
  CASE 
    WHEN p1--p2--p3 OR p2--p1--p3 OR p1--p3--p2 OR p3--p2--p1 OR p3--p1--p2  
    THEN 'Connected'  
    ELSE 'Not connected' 
  END