因此,我有一种类型的节点超过130M,另一种类型的节点超过500K,我正尝试在它们之间建立关系,如下所示:

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


问题是创建了1.3亿个关系,当我使用PERIODIC COMMIT时,我想以与LOAD CSV类似的方式进行

我的查询类型有这种功能吗?

最佳答案

就在这里。您需要安装APOC Procedures librarydownload here)。您将在Job Management部分中使用apoc.periodic.commit()函数。从文档中:


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


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

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

这是您可能会使用的方式(假设您的示例中某人只喜欢一种食物,而我们应该仅将其应用于:尚未设置该关系的人):

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})

关于neo4j - 如何批处理Neo4j Cypher查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38733170/

10-12 17:26