2017-10-27 9 views
0

私はcsvに従業員データをロードし、ラベルと関係を正常に作成しました。私は、次のことを実行できます。Neo4J:従業員/マネージャーの階層

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

と私は管理者と従業員のクラスターを取り戻すが、彼らは切断されます。これらの関係の強固なつながりを得るにはどうすればよいですか?

編集

ここで私はすべてのものを定義するために使用される設定です:

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 a Managerではないため、完全な階層はありません。

したがって、個々の切断されたチェーンがたくさんあることは意味があります。 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

関連する問題