문제

특정인을 아는 이웃과의 대화 시간의 상대적인 비율을 확인하고 싶습니다.

예를 들어 노드 A를 먼저 관찰할 때 우리는 그가 모든 이웃과 대화하는 데 소비한 시간을 알아야 하며 다음 쿼리로 실행됩니다.

neo4j-sh (0)$ start a = node(351061) match (a)-[r:TALKED_TO]->(b) return sum(r.duration)
==> +-----------------+
==> | sum(r.duration) |
==> +-----------------+
==> | 12418           |
==> +-----------------+
==> 1 row, 0 ms

다음으로 우리는 그의 이웃 중 특정 사람(가령 c)을 아는 사람이 누구인지 확인하고 b가 c를 아는 경우 a와 b 사이의 대화 시간만 합산해야 합니다.

neo4j-sh (0)$ start a = node(351061) match (a)-[r:TALKED_TO]->(b)-[p:KNOWS]->(c) return sum(r.duration)
==> +-----------------+
==> | sum(r.duration) |
==> +-----------------+
==> | 21013           |
==> +-----------------+
==> 1 row, 0 ms

여기서 논리적이지 않은 것은 두 번째 합계가 첫 번째 합계보다 큰 반면 두 번째 합계는 첫 번째 합계의 일부일 뿐이라는 것입니다.그러한 결과를 얻는 데 어떤 문제가 있는지 아는 사람이 있습니까?이 오류는 15,000명 중 7명의 사용자에게 나타났습니다.

도움이 되었습니까?

해결책

해당 쿼리에서 특정 사람 C를 보고 있는 것이 아닙니다.모든 경로를 모든 :KNOWS 관계와 일치시키므로 a->b->c 및 a->b->d가 있으면 a->b 사이의 기간이 두 번 계산됩니다.

대신에 해야 할 일은 다음과 같습니다.

start a = node(351061), c=node(xxxxx) // set c explicitly
match (a)-[r:TALKED_TO]->(b)
where b-[:KNOWS]->c // putting this in the where clause forces you to set C
return sum(r.duration)

콘솔의 예는 다음과 같습니다.http://console.neo4j.org/r/irm0zy

기억 match 넓어지고 where 결과를 강화합니다.당신은 또한 이것을 할 수 있습니다 match, 그러나 c를 지정해야 합니다. start.

집계 함수가 수행하는 작업을 테스트하는 좋은 방법은 명명된 모든 변수를 반환하거나 반환할 수 있는 경로를 설정하는 것입니다. 이렇게 하면 집계가 부분합으로 구분된 것을 볼 수 있습니다.다음과 같습니다:

start a=node(1) 
match a-[r:TALKED_TO]->b-[:KNOWS]->c 
return sum(r.duration), a,b,c;
+-----------------------------------------------------------------------------------------------+
| sum(r.duration) | a                       | b                       | c                       |
+-----------------------------------------------------------------------------------------------+
| 20              | Node[1]{name:"person1"} | Node[2]{name:"person2"} | Node[4]{name:"person4"} |
| 20              | Node[1]{name:"person1"} | Node[2]{name:"person2"} | Node[3]{name:"person3"} |
| 20              | Node[1]{name:"person1"} | Node[5]{name:"person5"} | Node[6]{name:"person6"} |
+-----------------------------------------------------------------------------------------------+
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top