2
使用Neo4J 2.1.5。这个密码查询很慢,有没有优化?
数据:
2000人
目标:对于每个人,计算出总的朋友,朋友的朋友,朋友的朋友的朋友。
结果如下:
Person FullName |朋友总数| Friends-2 total | Friends-3 total |全球总数
MATCH (person:Person)
WITH person
OPTIONAL MATCH person-[:KNOWS]-(p2:Person)
WITH person, count(p2) as f1
OPTIONAL MATCH path = shortestPath(person-[:KNOWS*..2]-(f2:Person))
WHERE length(path) = 2
WITH count(nodes(path)[-1]) AS f2, person, f1
OPTIONAL MATCH path = shortestPath(person-[:KNOWS*..3]-(f3:Person))
WHERE length(path) = 3
WITH count(nodes(path)[-1]) AS f3, person, f2, f1
RETURN person._firstName + " " + person._lastName, f1, f2, f3, f1+f2+f3 AS total
这些技巧是为了避免错误的计算与cylic图;这就是为什么我使用shortestPath
。
但是,此查询持续很长时间:60秒! 有没有可能的优化?
f1是正确的,但它不会为f2和f3返回好结果。 我期待51为f2,但它返回73. – Mik378
我不知道什么可能是错误的在您的查询... – Mik378
添加一个'distinct':'COLLECT(distinct p2)'帮助,但它仍然是53 51. – Mik378