2016-06-24 8 views
2

eq.pageのような特定のノードが、他のノード..likeタグとの関連性を持っているかどうかを検索する必要があります。Neo4j-cypherクエリーでの複数の一致ステートメント(if else条件付き)

If they are connected to tag nodes then search for the search string in page name and the tag names 

Else search for the search string in page name only 
MATCH ...//nodes of certain type  
WHERE  
    if r is null' 
     ...//Match query without relation for searching 
    else 
     ...//Match query without relation for searching 

Return ... 

MATCH (n:page)<-[r:pagetag]-(tag) 
if r is null 
then n.title CONTAINS 'java'or tag.name IN ["java"] 
return distinct n.name 
else n.title CONTAINS 'java'return distinct n.name 
    END 

このクエリはエラーを与えています。構文上の問題があります。しかし、私はこのようなページだけのために検索したいです。

答えて

2

最後に欲しかったことを痛感しました。皆さんありがとう。 OPTIONALマッチは私にとって素晴らしい仕事でした。

MATCH (s:page) 
WITH s 
OPTIONAL MATCH (s)<-[r:pagetag]-(tag) 
WITH s,r,tag 
Where s.pagename contains 'juniors'or tag.name contains 'math' 
return distinct s.pagename 
0

Neo4jで別のケースを使用している場合は、ケースを使用する必要はありませんか、ifをシミュレートするためにforeachを使用するとは思いません。

+0

私はのif-else –

+0

はいための条件はhttp://stackoverflow.com/questions/27576427/cypher-neo4j-case-expression-with-merge – Mvde

+0

を見るようにしたいような場合は、クエリを持つことができます私の質問をもう一度読んでください。私は理解できないかもしれませんが、その質問は私を助けませんでした。 –

1

それは基本的な条件ではありませんか?

MATCH (n:page)<-[r:pagetag]-(tag) 
WITH n,r,tag 
WHERE r IS NULL AND (n.title CONTAINS 'java' or tag.name IN ["java"]) 
OR NOT r is NULL AND (n.title CONTAINS 'java') 
return distinct n.name 
+0

それはまだ私のために働いていない。あたかもページノードとタグノードが関係を持たないかのように、特定のページノードはこのクエリによって検索されない。申し訳ありませんが、あなたの指導が必要です。ありがとうございました –

+0

実際には私はneo4j ver 2.3.2を使用しています。ここでnullチェックとwhere句は動作しませんでした。オプショナルマッチで私を救った。ありがとうございます。私は正しい質問を投稿した –

関連する問題