Cypher查询出现java.lang.OutOfMemoryError错误。

3
当我在Neo4j shell中输入以下查询:
MATCH (b:PHARMA)-[r:HAS_DONATED]->(a:DOCTOR)
WITH a,r,b, r.DECL_AVANT_MONTANT as total, COUNT(r) as count
MERGE (b)-[:RELATIONSHIP {
totalDECL: total,
numberDECL: count
}]->(a);

我收到了这个消息:
Error occured in server thread; nested exception is: java.lang.OutOfMemoryError: Java heap space

有什么办法可以解决这个问题吗?

COUNT(r) as count 的意义是什么?结果始终为 1,因为您在 WITH 子句中使用了 r - Richard Günzl
PHARMA节点和DOCTOR节点可以有多个HAS_DONATED关系。我正在尝试创建一个总结它们的单一关系。它必须包含HAS_DONATED关系的数量和捐赠金额的总和。清楚吗? - jvilledieu
2
如果你运行这个查询:MATCH (b:PHARMA)-[r:HAS_DONATED]->(a:DOCTOR) WITH a,r,b, r.DECL_AVANT_MONTANT as total, COUNT(r) as count RETURN count(*) 你会发现你将合并非常多的数据,这就是为什么你的事务大小填满了所有可用的堆空间并导致崩溃。 - Michael Hunger
2个回答

2

通过使用以下查询,我解决了我的问题:

USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:c:/sunshine.anonymes.csv" AS line
FIELDTERMINATOR ','
MATCH (b:DOCTOR {ID: line.BENEF_PS_ID})
MATCH (a:PHARMA {NAME: line.LABO})
MERGE (a)-[r:IS_LINKED_TO]->(b)
ON CREATE SET r.numberDECL = 1, r.totalDECL = toINT(line.DECL_AVANT_MONTANT)
ON MATCH SET r.numberDECL = r.numberDECL +1, r.totalDECL = line.totalDECL + r.totalDECL;

基本上,我正在进行CSV导入期间创建关系,并在整个过程中更新属性。

谢谢大家的帮助!


1

我不知道这是否有帮助,但这是针对您情况修复过的Cypher查询:

MATCH (b:PHARMA)-[r:HAS_DONATED]->(a:DOCTOR)      
WITH a, b, SUM(r.DECL_AVANT_MONTANT) as total, COUNT(r) as count   
MERGE (b)-[:RELATIONSHIP {   
totalDECL: total,   
numberDECL: count  
}]->(a);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接