Dia*_*par 7 neo4j graph-databases cypher
我有以下两种节点类型:
c:City {name: 'blah'}
s:Course {title: 'whatever', city: 'New York'}
Run Code Online (Sandbox Code Playgroud)
想要创造这个:
(s)-[:offered_in]->(c)
Run Code Online (Sandbox Code Playgroud)
我试图让所有与城市无关的课程与城市建立关系(如果不存在,城市就会被创造).然而,问题是我的数据集大约有500万个节点,并且我做出的任何查询超时(除非我增加10k).
......有人有什么建议吗?
编辑:
这是我现在正在运行的作业的查询(必须以10k块(数百万)完成,因为它需要几分钟.如果不存在则创建城市):
match (j:Job)
where not has(j.merged) and has(j.city)
WITH j
LIMIT 10000
MERGE (c:City {name: j.city})
WITH j, c
MERGE (j)-[:in]->(c)
SET j.merged = 1
return count(j)
Run Code Online (Sandbox Code Playgroud)
(现在不知道过滤掉已经匹配的好方法,所以试着用自定义"merged"属性标记它,我已经有了索引)
500000 是相当多的节点,在您的其他问题上,您建议 90% 没有您想要在此处创建的关系,因此这将需要一些时间。如果不了解您的系统(规格、neo 设置、编程环境),并且当您运行此系统(在旧数据或插入时),这只是对更整洁的解决方案的最佳猜测:
MATCH (j:Job)
WHERE NOT (j)-[:IN]->() AND HAS(j.city)
MERGE (c:City {name: j.city})
MERGE (j)-[:IN]->(c)
return count(j)
Run Code Online (Sandbox Code Playgroud)
显然,您可以根据需要重新添加限制。