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