Graph Traversal

pDestiny·2022년 9월 16일
0

Network Science

목록 보기
8/10
post-thumbnail

Traversing the Graph

Query를 수행할 때, 몇번이나 relationship을 거쳐 결과를 가져오는지 확인 할 수있는지를 묻는 문제이다.

위에서 제시한 쿼리의 작동방식은 먼저 Robert Blake를 찾고, Robert Blake가 출연한 영화를 찾는다. 그런다음 그 영화에 같이 출연한 Wesley, Woody, Jennifer를 차례로 찾아냄으로, 총 hit한 relationship은 4번이다. Robert Blake가 출연한 영화가 총 4개로 나오고, 각 영화에 공동출연한 배우가 3명씩임으로, 3 * 4 + 4 = 16 이다.

Relationships Traversed

이번에는 쿼리가 다르다. 이전에는 하나의 match에 2개의 path를 찾았지만, 이번에는 mutliple match를 이용한 쿼리다. 크게 다르냐고 생각할지 모르겠지만 결과가 다르다. 이전 쿼리에서는 Robert Blake를 한번만 찾고, 다른 공동 출연한 배우들을 찾아냈지만, 이번에는 Robert Blake를 계속 찾게 되어, collect(allActors.name)에 Robert Blake가 계속 낀다. 그러므로 Relationship의 traverse 횟수는 4* 4 + 4가되어 20이다.

Actors 2 Hops Away

Robert Blake로부터 2홉 만큼 ACTED_IN relationship으로 떨어져 있는 Actors의 수를 구하라는 것이다. 아래와 같이 쿼리를 작성하면 2홉만큼 ACTED_IN 관계로 이어져 있는 actors의 수를 바로 구할 수 있다.

MATCH (blake:Person{name: 'Robert Blake'})-[:ACTED_IN*2]-(others:Person)
RETURN size(collect(others.name)) # 

Actors 4 Hops Away

Actors 2 Hops Away와 동일한 문제이지만 2 홉에서 4홉으로 변경된 것만 다른다. 마찬가지로 쿼리도 그 부분만 바꿔주면 답을 얻을 수 있다. 단, 중복되지 않은 이름의 수를 원하니 collect 함수 안에 distinct predicate를 넣어주면 된다.

MATCH (blake:Person{name: 'Robert Blake'})-[:ACTED_IN*4-(others:Person)
RETURN size(collect(DISTINCT others.name)) # 253

Actors Up to 4 Hops Away

지금까지는 고정된 홉의 쿼리를 날렸지만, 이번문제는 1~4 홉까지 ACTED_IN으로 matching되는 쿼리를 날리라는 문제이다. 이 문제는 아래와 같은 쿼리로 해결 할 수 있다.

MATCH (blake:Person{name: 'Robert Blake'})-[:ACTED_IN*1..4]-(others:Person)
RETURN size(collect(others.name)) # 303
profile
Bioinformatician

0개의 댓글