Neo4j Cypher:基于公共属性键id在节点之间创建关系

Neo4j Cypher:基于公共属性键id在节点之间创建关系,neo4j,cypher,Neo4j,Cypher,我是Cypher(和Stackoverflow)的新手,在基于共享属性键创建节点之间的关系时遇到困难 我想这样做: MATCH (a:Person)-->()<--(b:Country) WHERE HAS (a.id) AND HAS (b.id) AND a.id=b.id CREATE (a)-[:LIVES]->(b); 查询正在运行。这是一个大数据集,所以可能需要一段时间才能奏效。由于Neo4j的处理时间太长,我不得不减少数据集的大小(从64k节点减少),但一旦我有

我是Cypher(和Stackoverflow)的新手,在基于共享属性键创建节点之间的关系时遇到困难

我想这样做:

MATCH (a:Person)-->()<--(b:Country)
WHERE HAS (a.id) AND HAS (b.id) AND a.id=b.id
CREATE (a)-[:LIVES]->(b);

查询正在运行。这是一个大数据集,所以可能需要一段时间才能奏效。由于Neo4j的处理时间太长,我不得不减少数据集的大小(从64k节点减少),但一旦我有了一个较小的数据集,它就可以正常工作了。

对于未来的谷歌用户来说,这是一个小小的补充

根据3.4版的帮助

has()函数已被exists()取代并已删除

新代码应为

MATCH (a:Person),
(b:Country)
WHERE EXISTS (a.id) AND EXISTS (b.id) AND a.id=b.id
CREATE (a)-[:LIVES]->(b);

尝试在匹配的键上添加一些索引,这将加快处理速度。对于未来的谷歌用户来说,
apoc.periodic.iterate()
使用apoc过程库是当前进行此类批处理而不必减少数据集的方法。
MATCH (a:Person),
(b:Country)
WHERE EXISTS (a.id) AND EXISTS (b.id) AND a.id=b.id
CREATE (a)-[:LIVES]->(b);