2017-03-03 4 views
0

同じ結果に含まれている他の長いパスに既に含まれている、キッパーによって返される小さなパスを削除するにはどうすればよいですか?キッパーによって返されたパスの一覧から、より小さいサブセットパスを削除します

たとえば、私のサイファーがMATCH path=(n)-[:REL*]->(m) where id(n)=<some id> return pathならば、したがって、タイプ[:REL]の任意の数の発信関係を含むすべてのパスを返します。ただし、より長いパス(2つ以上のノードを含む)の複数のパスを返します。各パスには、指定された開始ノードから長いパスの連続ノードへのパスが含まれます。例えば、それは次のパスを返すことがあります。

(a)-[:REL]->(b) 
(a)-[:REL]->(b)-[:REL]->(c) 
(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f) 
(a)-[:REL]->(b)-[:REL]->(d) 
(a)-[:REL]->(c) 
(a)-[:REL]->(c)-[:REL]->(e) 

あなたが(a)-[:REL]->(b)がすべて

  • (a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)
  • (a)-[:REL]->(b)-[:REL]->(c)
  • (a)-[:REL]->(b)-[:REL]->(d)に含まれてお気づきのように、

(a)-[:REL]->(c)です包含(a)-[:REL]->(c)-[:REL]->(e)

(a)-[:REL]->(b)-[:REL]->(c)でdが、私は、彼らが他の経路の一部であるように、出力に表示されるように(a)-[:REL]->(b)(a)-[:REL]->(c)(a)-[:REL]->(b)-[:REL]->(c)をたくない(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(f)

に含まれています。

これはサイファーで可能ですか?どういうわけか私は感じます(これを感じるのは変ですが)、特定のタイプの関係がノードから出ない(またはノードに来る)ことを暗示するために、関係仕様の前に!(論理的ではない)を許可してください。私は次のように書くことができました:

MATCH path=(n)-[:REL*]->(m)!-[:REL]->() where id(n)=<some id> return path 

これにより、これらの小さなパスは許可されませんでした。

とにかく私は上記のサイファーで何ができますか?

答えて

1

あなたはエンドノードが出ていないだけでパスを返す、このためにフィルタリングを追加することができます:REL関係を:

MATCH path=(n)-[:REL*]->(m) 
where id(n)=<some id> and not (m)-[:REL]->() 
return path 
+0

ええ、私はCYPHERもっと練習する必要があります...と私に許可しない、頻繁に技術者を切り替えます:\ – Mahesha999

関連する問題