2017-07-08 9 views
2

私は特定のTagに属するすべてのDecisionを返し、次のサイファーのクエリを持っている:のNeo4jサイファークエリおよび複合オブジェクト

MATCH (d:Decision)-[:BELONGS_TO]->(t:Tag) WHERE t.id = {tagId} RETURN d 

私のビジネスロジックによると、すべてのTagは同義語のセットを持つことができます

(t:Tag)<-[:FOR]-(ts:TagSynonym)-[:HAS]->(s:Tag) 

およびすべてs:Tagには、同じ方法で同義語が関連付けられている場合があります。無制限の深度。ts.approved = true

開始タグ(t.id = {tagId})に関連付けられた決定だけでなく、すべてのタグの同義語(無制限の深度)に関連付けられたすべての決定も返すために、最初のクエリを拡張する方法を示してください。

これらの決定のすべては、1つのd変数の下で返されるのが理想的です。

今、私は次のクエリで遊んだ:

MATCH p=(t:Tag)-[:FOR|HAS*]-(end:Tag) 
WHERE t.id = {tagId} AND NOT (end)<-[:FOR]-() 
OPTIONAL MATCH (d:Decision)-[:BELONGS_TO]->(tag) 
RETURN d 

が、それは動作しません。

http://54.165.53.29:33761/browser/ 
neo4j 
timer-rocks-hilltop 

次のクエリを使用してください:それはパス(Decision3)にのみ、最後の決定を返す

MATCH p=(t:Tag)-[:FOR|HAS*0..]-(end:Tag) 
WHERE t.id = 1 AND NOT (end)<-[:FOR]-() 
MATCH (d:Decision)-[:BELONGS_TO]->(end) 
RETURN d 

を私はのNeo4jのサンドボックスを作成している

を更新し

Decision1とDecision2も返さなければなりません。

これはsample databaseユーザー名/パスワードです:のNeo4j/neo4j1

私はこのタグに関連した3 Tagと3 Decisionを持っています。

また

Tag 2Tag 1の同義語であり、Tag 3Tag 2の同義語です。

DecisionTag 1で、その同義語(Tag 2Tag 3)で検索する必要があります。これは決定事項です:Decision1Decision2、ゼロ深さ可変の深さトラバーサルとの微妙な事がありDecision 3

+0

データセットのサンプルと予想される結果を掲載することはできますか? –

+0

確かに、私は私の質問を更新しました – alexanoid

答えて

3

MATCH p=(t:Tag)-[:FOR|HAS*0..]-(end:Tag) 
WHERE t.id = {tagId} AND NOT (end)<-[:FOR]-() 
MATCH (d:Decision)-[:BELONGS_TO]->(end) 
RETURN d 

アイデアは、それがTノードが持っている両方のケースを扱うことですFORまたはHASの関係とそうでない場合の関係。そのトリックは、見つかったタグ(たとえtノードであっても0)がendエイリアスの下にあることです。

あなたは、この記事では、可変長の関係についての深さでより多くのドキュメントを見つけることができます:https://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html

EDIT

タグのノードを見つけるためのロジックは、あなたの側に、クエリが返す間違っているようですAND NOT (end)<-[:FOR]-()というクエリのこの部分に起因するタグは1つだけです。それを取り除くと3の結果が返ってくることがわかります

+0

お返事ありがとうございます。このクエリは期待どおりに動作せず、タグ1による判定3のみを返しますが、論理結果にも判定1と判定2が含まれている必要があります – alexanoid

+0

右のように、グラフのオンライン版を共有してください。テストクエリ。多くのツール、graphgen、sandbox、neo4jコンソールなどがあります。 –

+0

質問本体に私のデータベースのスナップショットを提供しました。正直なところ、このデータをサンドボックスにインポートする方法がわかりません – alexanoid

関連する問題