查询不在neo4j中工作

时间:2017-04-22 05:36:18

标签: neo4j cypher

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

1 个答案:

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

这里的问题是Employeedepartments没有引用你之前匹配的任何东西,这是这些变量的第一次出现,这将摒弃这个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),以便快速匹配。