我已经加载了一个包含员工数据的csv,成功创建了标签和关系。我可以运行以下内容:
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 的格式相同。
您组织数据加载的方式,Manager
总是超过DisplayName
。 您没有完整的层次结构,因为DisplayName
永远不会is_over
Manager
。
因此,您获得一堆单独的断开连接的链是有道理的。 is_over
关系始终从管理器转到显示名称。
我假设row.display_name
给你一个与其他Manager
匹配的名字。 我会考虑摆脱DisplayName
和Manager
,并将两者建模为Employee
. 然后就说(e1:Employee)-[:is_over]-> (e2:Employee)
您缺少的最后一部分是您需要确保数据中的某些display_name
值与manager_name
的其他行值匹配。 如果不是这样,那么无论您做什么,数据都不会连接。
我假设数据如下:
manager_name,display_name
A,B
B,C
按照加载现在的工作方式,经理 A is_over显示名称 B,经理 B 位于显示名称 C 之上,但"显示名称 B"和"管理器 B"不同,没有连接。