2017-10-27 7 views
0

나는 직원 데이터로 csv를로드하고 라벨과 관계를 성공적으로 만들었습니다. 다음을 실행할 수 있습니다 :Neo4J : 직원/관리자 계층

그리고 다시 클러스터를 가져 오지만 연결이 끊어집니다. 그러한 관계의 견고한 연결 고리를 얻으려면 어떻게해야합니까?

USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM "file:///ldap.csv" AS row 
MERGE (C:Company {Company: row.company}) 
MERGE (N:Name {Name: row.user_name}) 
MERGE (M:Manager {Manager: row.manager_name}) 
MERGE (B:BU {BU: row.bus_unit}) 
MERGE (T:Title {Title: row.title}) 
MERGE (CC:CostCenter {CostCenter: row.cost_center}) 
MERGE (D:Dept {Dept: row.dept}) 
MERGE (E:Mail {Dept: row.mail}) 
MERGE (DN:DisplayName {DisplayName: row.display_name}) 
ON CREATE SET N.DisplayName = row.display_name,N.UserName = row.user_name,N.Mail = row.mail,N.Title = row.title,N.Dept = row.dept,N.BU = row.bus_unit,N.Manager = row.manager_name,N.CostCenter = row.cost_center,N.Company = row.company 
MERGE (N)-[:works_at]->(C) 
MERGE (N)-[:has_bu]->(B) 
MERGE (N)-[:has_title]->(T) 
MERGE (N)-[:has_cc]->(CC) 
MERGE (N)-[:works_in]->(D) 
MERGE (M)<-[:is_over]-(DN); 

모두 M 및 DN이 같은 형식으로되어 있습니다 :

편집

는 여기에 내가 모든 것을 정의하는 데 사용되는 설정입니다.

+0

'RETURN nodes (p), relationships (p)'가 효과가 있습니까? –

+0

아니요 - 같은 결과입니다. 나는 매니저 -> 직원 클러스터를 얻지 만, 관리자 자신은보고 대상과 연결되지 않습니다. 내 관계 및/또는 데이터 구조가 올바르지 않을 수 있습니까? 나는 간단한 MERGE (M) <- [: is_over] - (N); CSV를로드하고 레이블을 설정할 때. – user3425900

답변

2

데이터로드를 구성한 방법에 따라 Manager은 항상 DisplayName을 초과합니다. DisplayName은 절대로 이 아니므로 전체 계층 구조가 없습니다.

그래서 개별 연결이 끊긴 체인이 많다는 의미입니다. is_over 관계는 항상 Manager에서 DisplayName으로 이동합니다.

나는 row.display_name에 다른 Manager과 일치하는 이름이 있다고 가정합니다. DisplayNameManager을 없애고 모델을 모두 Employee으로 간주하는 것이 좋습니다. 그렇다면 그냥 말하십시오 (e1:Employee)-[:is_over]-> (e2:Employee)

마지막 부분은 display_name의 특정 값이 manager_name의 다른 행 값과 일치하는지 확인해야한다는 것입니다. 이것이 사실이 아니라면, 데이터는 당신이 무엇을 하든지 관계없이 연결됩니다. manager_name,display_name A,B B,C

부하가 지금 작동하는 방법, 당신은 표시 이름 B is_over 관리자 A를 얻을 것이다, 및 관리자 B는 표시 이름 C 이상이지만, "표시 이름 :

나는이 같은 데이터를 있으리라 믿고있어 B "와"관리자 B "는 서로 다르며 연결되어 있지 않습니다.

+0

Frobber에게 감사드립니다! – user3425900