如何批量Neo4j Cypher查询

时间:2016-08-03 02:02:29

标签: neo4j cypher

所以我有一个类型超过130M的节点和另一种类型的500K节点,我正在尝试按如下方式创建它们之间的关系:

MATCH (p:person)
MATCH (f:food) WHERE f.name=p.likes
CREATE (p)-[l:likes]->(f)

问题在于创建了130M关系,我希望在使用PERIODIC COMMIT

时以与LOAD CSV类似的方式执行此操作

我的查询类型是否有这样的功能?

1 个答案:

答案 0 :(得分:1)

是的,有。您需要安装http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#waitkeyAPOC Procedures library)。您将在download here部分中使用apoc.periodic.commit()函数。来自文档:

  

CALL apoc.periodic.commit(statement,params) - 重复批量更新   语句直到它返回0,此程序阻塞

您将结合使用LIMIT子句,将限制值作为参数传递。

但是,为了获得最佳效果,您需要确保您的连接数据(我认为f.name)具有索引或唯一约束,以大幅减少时间。

以下是你如何使用它(假设你的例子中一个人只喜欢一种食物,我们应该只将它应用于:那些已经没有关系的人):< / p>

CALL apoc.periodic.commit("
MATCH (p:person)
WHERE p.likes IS NOT NULL
AND NOT (p)-[:likes]->(:food)
WITH p LIMIT {limit}
MATCH (f:food) WHERE p.likes = f.name
CREATE (p)-[:likes]->(f)
RETURN count(*)
", {limit: 10000})