2017-04-22 45 views
0
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); 

我想要使用此查询节点的结构性质的关系查询不Neo4j的工作

员工

[ 
gender M 
emp_no 10001 
birth_date 1953-09-02 
last_name Facello 
hire_date 1986-06-26 
first_name Georgi 

] 

节点个省是

[ 
dept_no d009 
dept_name Customer Service 
] 

结构的文件 dept_emp.csv是

(
emp_no dept_name from_date to_date 
) 

该ide不会显示错误,只是开始处理,并在6小时后仍然处理。

回答

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)以进行快速匹配。

+0

thnx先生我是学生,我刚开始学习neo4j –