2017-07-27 1 views
4

返されたパスの関係方向を理解するのに問題がある。Neo4jサイファーシェルで偽の交互関係の方向でパスが返される

Iこの

(:START)-[:NEXT]->(:NODE)-[:NEXT]->(:NODE)... 

ようなグラフは、今は10までの長さを:NEXTの方向における開始ノードから開始するすべてのパスに一致していた、と言います。私は

(:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)<-... 

のような一見混ざっ:NEXT方向で出力パスを取得していますし、交互の方向がどこから来た私は理解できない

MATCH t=((:START)-[:NEXT*..10]->(:NODE)) 
RETURN t; 

のようにクエリが見えます。

編集: グラフは単なる直線(一方向)です。サイクルなし、ブランチオフなし。シェルのシナリオを次のように複製してください:

CREATE (s:START); 
MATCH (s:START) MERGE (s)-[:NEXT]->(a:NODE)-[:NEXT]->(b:NODE)-[:NEXT]->(c:NODE)-[:NEXT]->(d:NODE); 
MATCH t=((:START)-[:NEXT*..10]->()) return t; 

+------------------------------------------------------------------------------+ 
| t                   | 
+------------------------------------------------------------------------------+ 
| (:START)-[:NEXT]->(:NODE)             | 
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)         | 
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)     | 
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE) | 
+------------------------------------------------------------------------------+ 

矢印が方向を変えてどのように戻ってくるかを見てください。それが私を混乱させている。元の質問のeditから

+0

[こちら](http://console.neo4j.org/r/2zqmqp)をご覧になり、クエリを実行してください。私は ':ST'を':START'に、 ':N'を':NEXT'に変更しただけです。これらは誤植だと思う。私にとっては結果は大丈夫かな? –

+0

上記の質問を修正してください。 – tscherg

+0

私はあなたの質問をもう一度実行しました。結果はOKです。見てください[ここ](http://console.neo4j.org/r/3p9vpn)。 –

答えて

2

EDIT:グラフは、(一つの方向で)ちょうど直線です。 No サイクル、ブランチオフはありません。

は問題が実際に発生しcypher-shell内のステートメントを実行:以下とシェル シナリオを複製してください。私にはバグがあるようだ。私はこの問題をサイファー殻のギブス(Github)で調べ、何も見つけ出しませんでした。だから私はissueを開いた。

EDIT 2:

The issue私はGitHubの上で開かれたが、このcommitで参照されました。おそらく、この修正は次のリリースで公開される予定です。​​で閉じて固定

EDIT 3

号。


オリジナルの答えは以下の通りです:

私はここにあなたのシナリオをシミュレートしました。見て:

サンプルデータセット:

CREATE (node1:Node {id:1}) 
CREATE (node2:Node {id:2}) 
CREATE (node3:Node {id:3}) 
CREATE (node4:Node {id:4}) 
CREATE (node1)-[:NEXT]->(node2) 
CREATE (node2)-[:NEXT]->(node3) 
CREATE (node3)-[:NEXT]->(node4) 
CREATE (node4)-[:NEXT]->(node2) 

問合せ:

MATCH t=((:Node {id:1})-[:NEXT*..10]->(:Node {id:4})) 
RETURN t; 

結果:

Result 1

あなたが見ることができるように(と質問で説明したように)(:Node {id:4})-[:NEXT]->(:Node {id:2})が返されます。ただし、これはNeo4jブラウザで[結果ノードを接続]オプションが有効になっているためです。 Neo4jブラウザの設定で無効にすることができます。見て:

Settings

「結果ノードを接続し、」無効にして、再度クエリを実行した後:オプション「接続の結果ノードが」唯一のグラフの視覚化に適用される

Result 2

注意結果。つまり、(:Node {id:4})(:Node {id:2})の間の関係は結果に実際には存在せず、視覚化を「表」、「テキスト」または「コード」に変更すると表示されません。

+1

非常に精巧な答えをありがとう!残念ながら私はさらに明確にする必要があります。私のグラフには指示されたサイクルはありません。上記の元の質問で私の編集を見てください – tscherg