2014-09-17 2 views
0

나는 기본적으로 사람들이 다른 사람들과 접촉 할 수있는 쿼리를 시도하는 그래프가 있습니다.친구 사이의 연결 사이퍼/Neo4j

개인으로 시작하여 연락 한 모든 사람과 연락처 간의 모든 연락처를 반환하는 사이퍼 쿼리를 실행하려고합니다.

내가이 톰을 반환 neo4j 웹 인터페이스에서

start n = node:node_auto_index(name = "TOM") MATCH (n)-[r]-(m) RETURN * 

시작 한 쿼리입니다, 누구의 톰 연락하고 20 개 개의 노드와 32 개의 관계에서 톰의 접점 사이의 관계. I가 단지 (26)의 관계가있다라고 톰의 접촉부 사이를 제외

start n = node:node_auto_index(name = "TOM") MATCH (n)-[r]-(m) RETURN count(*) 

실행할 때 결과는 포맷 m 출력, n 개의 R (노드, 노드 관계) 그러나

이다.

결과를 d3.js 시각화로 가져 오므로 결과가 여전히 노드, 노드, 관계와 유사한 형식 (예 : 한 줄에 각 관련 쌍)으로 출력되는 것이 이상적입니다.

편집 : 더 자세히

나는 서로 연락 할 수있는 사용자와 그래프가있다. 사용자를 쿼리하고 그가 연락 한 모든 사용자와 그가 연락 한 사용자 간의 모든 연락을 원할 수 있기를 바랍니다. LinkedinLabs Inmaps

enter image description here

그러나 나는 상대적으로 노골적 d3 forced directed에서 사용할 수있는 형식으로 출력을 필요로 유사합니다. 출력은 예를 들어, 한 예를 들어

(Tom) - (Tom's friend) - (Tom's Friend's Friend) 

이 D3 그래프 기대와 노드의 입력 오브젝트 때문에 이것은

(Tom) - (Tom's friend) 
(Tom's Friend) - (Tom's Friend's Friend) 

로 분할되는 것이 쉬울 것이며 링크 개체.


편집 uklas '대답에서

,이 작업을 얻었다.

start n = node:node_auto_index(name = "Tom") 
MATCH (n)-[r]-(m) 
RETURN n as person, m as personas_fr, r 
UNION 
start n = node:node_auto_index(name = "Tom") 
MATCH (a)-[r1]-(n)-[r2]-(m), (a)-[r]-(m) 
RETURN a as person, m as personas_fr, r 

답변

1

즉 어떤 사람들은 Tom 여러 번 접촉했던 여러 연락처 관계가있을 수 있습니다. count(*)을 사용하면 고유 한 연락 대상자 만 반환하는 연락처를 집계합니다. *을 사용하면 일치하는 모든 것을 반환합니다.

목표에 대해 더 많이 작성하고 싶은 경우 (예 : 질문하기) 진행 방법에 대한 제안을 추가 할 수 있습니다.

갱신

불행하게도 내가 d3 형식에 익숙하지 해요,하지만 어쩌면이 도움이 될 것입니다 : 내가 좀 더 추가 한

(Tom) - (Tom's friend1) 
(Tom) - (Tom's friend2) 
(Tom) - (Tom's friend3) 
(Tom's Friend1) - (Tom's Friend's Friend) 
(Tom's Friend1) - (Tom's Friend's Friend) 
(Tom's Friend1) - (Tom's Friend's Friend) 
(Tom's Friend2) - (Tom's Friend's Friend) 
(Tom's Friend2) - (Tom's Friend's Friend) 
(Tom's Friend3) - (Tom's Friend's Friend) 
(Tom's Friend3) - (Tom's Friend's Friend) 
+0

형식

start n = node:node_auto_index(name = "TOM") MATCH (n)-[r]-(m) RETURN n as person, m as personas_fr UNION start n = node:node_auto_index(name = "TOM") MATCH (n)-[r]-(m), (m)-[r2]-(m2) WHERE Id(n) <> Id(m2) RETURN m as person, l as personas_fr 

데이터를 반환 세부 묘사. – Ger

+1

나는 편집을했습니다 – ulkas

+0

고마워요. 전에 유니온에 대해 생각한 적 없어요. 불행히도 m2는 모든 m의 친구로 구성되어있는 것 같습니다 (톰의 친구 친구 ...).하지만 다른 친구와 친구 인 친구들의 친구도 포함하고 싶습니다 (다른 친구가있는 친구). 따라서 그래프는 톰과 그의 친구들만으로 구성되어야하지만, 친구 사이의 관계도 포함해야합니다. – Ger