2017-10-27 5 views
0

Ich habe eine CSV mit Mitarbeiterdaten geladen, Etiketten und Beziehungen erfolgreich erstellt. Ich kann folgendes ausführen:Neo4J: Employee/Manager Hierarchie

MATCH p=()-[r:is_over]->() RETURN p 

und ich bekomme Cluster von Managern und Mitarbeitern zurück, aber sie sind getrennt. Wie bekomme ich eine solide Verbindung dieser Beziehungen?

bearbeiten

Hier ist das Setup habe ich alles zu definieren:

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); 

Sowohl M und DN im gleichen Format sind.

+0

Funktioniert 'RETURN Knoten (p), Beziehungen (p)' für Sie? –

+0

Nein - dasselbe Ergebnis. Ich bekomme Cluster von Managern-> Mitarbeitern, aber die Manager selbst sind nicht mit dem verbunden, dem sie berichten. Ist es möglich, dass meine Beziehung und/oder meine Datenstruktur nicht korrekt sind? Ich habe eine einfache MERGE (M) <- [: is_over] - (N); wenn ich den csv geladen und die etiketten gesetzt habe. – user3425900

Antwort

2

Die Art und Weise, wie Sie Ihre Daten laden, ist eine Manager immer über eine DisplayName. Sie haben keine vollständige Hierarchie, weil eine DisplayName nie is_over eine Manager ist.

Also ist es sinnvoll, dass Sie eine Reihe von einzelnen Ketten unterbrochen bekommen. Die Beziehung is_over geht immer von einem Manager zu einem DisplayName.

Ich nehme an, dass die row.display_name gibt Ihnen einen Namen, der zu einigen anderen Manager entspricht. Ich würde in Betracht ziehen, DisplayName und Manager loszuwerden und beide als nur Employee zu modellieren. Dann sagen Sie einfach (e1:Employee)-[:is_over]-> (e2:Employee)

Der letzte Teil, den Sie vermissen, ist, dass Sie in Ihren Daten sicherstellen müssen, dass bestimmte Werte von display_name anderen Zeilenwerten von manager_name entsprechen. Wenn dies nicht der Fall ist, werden die Daten nicht verbunden, egal was Sie tun.

Ich gehe davon aus Daten wie folgt aus: manager_name,display_name A,B B,C

Die Art und Weise Ihre Last jetzt funktioniert, werden Sie Manager A is_over Anzeigename B erhalten, und Manager-B ist über Anzeigenamen C, aber „Anzeigename B "und" Manager B "sind unterschiedlich und haben keine Verbindung.

+0

Danke Frobber! – user3425900