2017-10-30 7 views
0

내 DB에 태그가있는 태그가있는 리소스가 있습니다. 태그는 다른 태그 내에있을 수 있습니다 (예 : 'neo4j'는 다음과 같이 '데이터베이스'에 연결됩니다 : (neo4j:tag)-[:WITHIN]->(databases:tag)). 모든 태그에 부모가있는 것은 아닙니다.노드를 직접 및 간접적으로 노드 집합에 연결하여 반환 할 수 있습니까?

'데이터베이스'를 검색하면 'neo4j'가 표시된 태그가있는 리소스가 반환됩니다.

옵션으로 일치하는 항목을 사용하려고했지만 예상대로 작동하지 않습니다.

포함 된 태그는 태그 ID 배열입니다.

나는 또한 다음과 같은 것을 시도했지만, 부모를 가진 태그만으로 태그 된 리소스 만 반환하는 것으로 보입니다.

OPTIONAL MATCH (parent:tag)<-[:WITHIN_TAG]-(:tag)<-[:TAGGED_WITH]-(re:resource)-[:TAGGED_WITH]->(child:tag)

어떤 제안이나 아이디어를 감상 할 수있다.

답변

1

이 쿼리 작업을해야합니다 :

MATCH (re:resource)-[:TAGGED_WITH]->(:tag)<-[:WITHIN_TAG*0..]-(u:tag) 
WHERE u.uid IN {includedTags} 
RETURN DISTINCT re; 

가변 길이가 0 이상 WITHIN_TAG 관계 경로와 일치하고, 시작하고 tag 노드로 끝납니다 패턴 (:tag)<-[:WITHIN_TAG*0..]-(u:tag). 길이가 0 인 경로의 경우 시작 및 끝 노드는 실제로 동일한 노드입니다.

주의 : 실제로 가변 길이 경로 (예 : [:WITHIN_TAG*0..5])에 대해 적절한 상한값을 사용해야합니다. 그렇지 않으면 쿼리가 완료되거나 메모리가 부족할 수 있습니다.

+0

아주 좋습니다. 고마워. 그것은 보인다 : WITHIN_TAG 관계는 다른 방향을 가리킬 필요가있다. – bornytm

+0

이런 식으로하는 바람직하지 않은 효과 중 하나는 검색 태그를 추가하는 것이 결과를 줄이기보다는 확장하는 것입니다. 어떤 것보다는 모든 (또는 대부분의) 태그와 일치하는 노드를 반환하는 방법을 생각해 볼 수 있습니까? – bornytm