Neo4j의 여러 시작 노드 (여러 경로가 될 수 있음)에서 여러 경로 (UI로 그리기)를 쿼리해야하는데 쿼리를 조합하기 위해 UNION
을 사용하지만 데이터를 검색하는 것이 가장 효율적인 방법이 아니라고 생각하십시오 (시작 노드에서 인덱스도 사용하고 있습니다). 큰 쿼리를 만들 때 모든 종류의 불쾌한 일이 발생합니다.Neo4j Cypher : UNION으로 매우 큰 쿼리 만들기
MATCH path = ((n:actor)-[*0..2]->(g)-[p:was_filmed_at]->(k:movie_set)-[l:located]->(i:state))
WHERE n.name=’john doe1' AND (g:acted_in OR g:produced)
AND p.addDate >= '2017-12-10T00:00:00+00:00'
AND p.addDate <= '2017-12-12T08:08:06+00:00'
AND l.addDate >= '2017-12-10T00:00:00+00:00'
AND l.addDate <= '2017-12-12T08:08:06+00:00'
RETURN nodes(path), relationships(path)
LIMIT 1000
UNION
MATCH path = ((n:actor)-[*0..2]->(g)-[p:was_filmed_at]->(k:movie_set)-[l:located]->(i:state))
WHERE n.name=’john doe2' AND (g:acted_in OR g:produced)
AND p.addDate >= '2017-12-10T00:00:00+00:00'
AND p.addDate <= '2017-12-12T08:08:06+00:00'
AND l.addDate >= '2017-12-10T00:00:00+00:00'
AND l.addDate <= '2017-12-12T08:08:06+00:00'
RETURN nodes(path), relationships(path)
LIMIT 1000
UNION
MATCH path = ((n:actor)-[*0..2]->(g)-[p:was_filmed_at]->(k:movie_set)-[l:located]->(i:state))
WHERE n.name=’john doe3' AND (g:acted_in OR g:produced)
AND p.addDate >= '2017-12-10T00:00:00+00:00'
AND p.addDate <= '2017-12-12T08:08:06+00:00'
AND l.addDate >= '2017-12-10T00:00:00+00:00'
AND l.addDate <= '2017-12-12T08:08:06+00:00'
RETURN nodes(path), relationships(path)
LIMIT 1000
이 만 3 경로와 쿼리이며, 수백 잘 확장되지 않습니다
쿼리는 다음과 같이 보인다. 이 작업을 수행하는 간단하고 효율적인 방법이 있습니까?
이름 만 변경한다고 가정 할 때 경로를 결합하지 말고 왜 그렇지 않습니까? 또한 PROFILE을 (를) 쿼리에 사용 했습니까? 궁극적 인 병목 현상을 발견하기 위해 –
또는 여전히 큰 쿼리를 작성할 것입니다. 짧은 쿼리를 생성 할 때 @Bruno Peres가 솔루션을 표시했습니다. 감사! – Yuval