0

我是 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);

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)

它不会返回路径,因为节点按 node(6)-node(5)-node(4) 顺序连接。

4

2 回答 2

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

于 2013-05-30T13:09:42.560 回答
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
于 2013-09-09T13:01:02.517 回答