2017-03-21 2 views
0

힐로는Neo4J, 일치와 노드 "OR"

난 노드가 TYPEx의 수 또는 typeY 내 첫번째 생각이었다 할 수있는 그래프를 일치시킬 :(

어떤 식 으로든 두 번 쿼리를 입력하지 않고 거기에이 같이 :

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

누군가 나를 도울 수 있습니까? 당신이 그들에게 또 다른 일반적인 라벨을 추가 할 수 있습니다, "중 TYPEx의 또는 typeY는"자주 조회 및 도메인의 일부 공통의 목적을 공유하는 경우 방법은, 그러나

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

입니다

답변

2

한 사전 :)에 감사합니다 같은 "commonXY"및 대신 해당 레이블을 사용하여 쿼리.

0

이 쿼리는 n 여러 레이블이있는 경우에도 작동합니다

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

n:Label

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

불행하게도이 아니에요 n 개의 술어를 성능 저하없이이 작업을 수행하는 것이 효율적인 방법이있다. 다른 모든 현재 답변은 모든 노드를 검색 한 다음 레이블에 필터를 적용해야합니다 (많은 수의 노드에서는 성능이 좋지 않습니다 (PROFILE 쿼리). 내가 아는 모든 효율적인 수단은 더 장황하다.

두 쿼리의 UNION을 수행하여 all : typeX 및 : typeY 노드에서 노드 한 개를 반환 할 수 있습니다.

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