malloc
我想使用此查询与属性建立关系
的结构员工
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///dept_emp.csv" AS row
MATCH (emp_no:Employee {emp_no: row.emp_no})
MATCH (dept_no:departments {dept_no: row.dept_no})
MERGE(Employee)-[:belongs_to{from_date: row.from_date,to_date:
row.to_date}]->(departments);
节点部门
[
gender M
emp_no 10001
birth_date 1953-09-02
last_name Facello
hire_date 1986-06-26
first_name Georgi
]
文件结构 dept_emp.csv是
[
dept_no d009
dept_name Customer Service
]
ide不会显示错误,只是开始处理并且在6小时后仍在处理。
答案 0 :(得分:1)
我认为你可能对匹配语法有点困惑,哪一部分是变量,哪一部分是节点标签。
MATCH (emp_no:Employee {emp_no: row.emp_no})
在上面的匹配中,:Employee
是节点的标签。 emp_no
是绑定到:匹配的Employee节点的变量。
在查询的后面,你有这个:
MERGE(Employee)-[:belongs_to{from_date: row.from_date,to_date:
row.to_date}]->(departments);
这里的问题是Employee
和departments
没有引用你之前匹配的任何东西,这是这些变量的第一次出现,这将摒弃这个MERGE是什么这样做。实际上,它正在检查所有节点之间的所有关系(并对CSV中的每一行执行此操作),查找:belongs_to与给定日期属性的关系。
我建议您停止查询(必要时通过杀死Neo4j)清理数据(如果需要)并再次尝试,但尝试使用之前绑定的变量进行MERGE:
MERGE(emp_no)-[:belongs_to{from_date: row.from_date,to_date:
row.to_date}]->(dept_no);
确保您拥有索引或唯一约束:Employee(emp_no)和:departments(dept_no),以便快速匹配。