查询在neo4j中不起作用

查询在neo4j中不起作用,neo4j,cypher,Neo4j,Cypher,我想使用这个查询节点的结构与属性建立关系 雇员是 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_d

我想使用这个查询节点的结构与属性建立关系

雇员是

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小时后仍在处理。

我想您可能对匹配语法有点困惑,哪部分是变量,哪部分是节点标签

(
emp_no  dept_name   from_date   to_date
)
在上面的匹配中,
:Employee
是节点的标签
emp_no
是绑定到匹配的:Employee节点的变量

在查询的后面部分,您将看到以下内容:

MATCH (emp_no:Employee {emp_no: row.emp_no})
这里的问题是
Employee
departments
没有引用您之前匹配的任何内容,这是这些变量的第一次出现,这将使此合并失去作用。实际上,它正在检查所有节点之间的所有关系(并对CSV中的每一行执行此操作),查找:归属于具有给定日期属性的关系

我建议您停止查询(如有必要,通过杀死Neo4j)清理数据(以防需要)并重试,但尝试与之前绑定的变量合并:

MERGE(Employee)-[:belongs_to{from_date: row.from_date,to_date: 
row.to_date}]->(departments);
确保在:Employee(emp_no)和:departments(dept_no)上有索引或唯一约束,以便快速匹配

MERGE(emp_no)-[:belongs_to{from_date: row.from_date,to_date: 
row.to_date}]->(dept_no);