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

「つながり」を構成するさまざまなパターンを、 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 に答える
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 に答える