Cypher请求sum()超过子树的未知错误

时间:2014-08-05 09:19:13

标签: neo4j cypher

尝试发出以下密码请求match (n:FOLDER)-[r*]->(m:FILE) with n,sum(m.size) as calc SET n.calculatedSize=calc 大约一分钟后,密码浏览器显示Unknown error

我的请求应该夸大整个子树的大小。因此,每个文件夹都应该具有所有子项的总结大小(FOLDER和FILE)。在生产环境中,将有大约900万件物品,最大深度为15件。

为什么请求返回Unknown error,有没有更好的方法来实现计算的大小?

2 个答案:

答案 0 :(得分:1)

fadanner,

您可能会发现,首先进行一级计算以将文件大小合并到其直接父文件夹中会更快,然后再进行操作。

MATCH (n:FOLDER)-[r]-(m:FILE)
WITH n, sum(m.size) as calc
SET n.calculatedSize = calc

在所有FOLDER节点上设置临时属性,以指示它们是否已被访问过。

MATCH (m:FOLDER) set m.seen = 0

将叶文件夹标记为已显示。

MATCH (m:FOLDER)
WHERE NOT (m)-[:CONTAINS]->(:FOLDER)
SET m.seen = 1

重复应用此查询,直到返回值为零以计算所有大小。

MATCH (m:FOLDER {seen : 0})-[:CONTAINS]->(n:FOLDER)
WITH m, sum(n.seen) AS val1, count(n) AS val2, sum(n.calculatedSize) AS val3
WHERE val1 = val2
SET m.calculatedSize = m.calculatedSize + val3, m.seen=1
RETURN count(m)

完成后,请删除“看过”'具有

的属性
MATCH(m:FOLDER)
REMOVE m.seen

希望这有帮助。

恩典与和平,

吉姆

答案 1 :(得分:0)

尝试在变量路径长度中指定限制:

match (n:FOLDER)-[r*..15]->(m:FILE) 
with n,sum(m.size) as calc 
SET n.calculatedSize=calc