2017-07-02 22 views
2

は、私は2つのTagノード間TagSynonymノードを返すサイファークエリを持っていますssは独自のTagSynonymなどを持つことができます。のNeo4jサイファーは、再帰クエリ

この構造の深さはかなり大きいことがあります。

t:Tagとその同義語の後継者のすべてに確立されたすべてのTagSynonym戻すためには、このクエリを拡張するために私を助けてください(この再帰構造の終わりまでs:Tagと深いためのタグを。)

答えて

3

このようなものをいそれが正しい方向に進んでいるように見えますか?

apoc.path.expandConfigを基本的に使用してsから開始し、新しいTagSynonymTagノードを取得し始めます。このクエリの線に沿って何かを検討することもできAPOCライブラリを使用せずに似た何かを達成するために

MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 
WHERE t.id = {tagId} AND s.id = {synonymId} 
WITH t, ts, s 
CALL apoc.path.expandConfig(s 
{ 
    uniqueness:"NODE_GLOBAL", 
    labelFilter:"TagSynonym|Tag", 
    relationshipFilter: '<FOR|HAS>' 
}) YIELD path 
RETURN t, ts, s, path 

必要に応じて、...あなたの答えのための

MATCH (t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 
WHERE t.id = {tagId} AND s.id = {synonymId} 
WITH t,ts,s 
OPTIONAL MATCH p=(s)-[:FOR|HAS*]-(end:Tag) 
WHERE NOT (end)<-[:FOR]-() 
RETURN p 
+0

感謝。私は謝罪しますが、apocなしで実装することは可能ですか?以前はapocをインストールしようとしましたが、失敗しました(特に、Neo4jを組み込んだテストでは)、アプリケーションで純粋なCypherクエリを使用しました。 – alexanoid

+2

あなたのためにうまくいかない非APOCクエリを追加しました。私はあなたのデータでどのように動作するのか分かりません。また、パス拡張では裸の '*'を注意してください。 'Tag'と' TagSynonym'ノードがどれほど密接に関連しているかによって、すぐに制御が外れることがあります。 –

+0

ありがとうございます、それは働いています! – alexanoid

関連する問題