2017-03-21 6 views
0

HELOコマンドは、のNeo4j、マッチを持つノード "OR"

私は、ノードがtypeXであるかtypeY 私が最初に考えたことができ、グラフを一致させたいです:(

は、二回のクエリを入力することなく、どのような方法があります。このよう :?

match (:typeX)-[]-(z), (:typeY)-[]-(z) return z 

誰かが私を助けることができますか? は、事前にあなたに感謝:)

答えて

2

一つの方法は、

MATCH (n) WHERE labels(n) IN ['typeX','typeY'] 
WITH n 
MATCH (n)-[]-(z) 
RETURN z 

「typeXまたはtypeYのどちらかが」頻繁に照会し、ドメイン内のいくつかの共通の目的を共有している場合は、あなたが彼らに別の共通のラベルを追加することができています代わりにそのラベルを使用して照会してください。

MATCH (n) 
WHERE ANY(lab IN labels(n) WHERE lab IN ['typeX', 'typeY']) 
MATCH (n)--(z) 
RETURN z 
0

このクエリはnは、複数のラベルを持っている場合でも動作します。現在の他の回答はすべて、すべてのノードをスキャンしてからラベルをフィルタリングする必要がありますが、これは多数のノード(PROFILEクエリ)ではパフォーマンスが低下します。私が知っているすべての効率的な手段は、より冗長です。

2つのクエリのUNIONを実行して、all:typeXおよび:typeYノードから1ホップのノードを返すことができます。

match (:typeX)--(z) 
return z 
union 
match (:typeY)--(z) 
return z 
0

n個の述語n:Label

MATCH (n)--(z) 
WHERE n:typeX OR n:typeY 
RETURN z 
0

は、残念ながら、性能を犠牲にすることなく、これを行うための良い効率的な方法がそこにはありませんされています

関連する問題