2015-11-03 80 views
1

正如標題所說,我有一個與關係N相互關聯的節點圖。我現在想要找到距離彼此超過20跳的所有節點對。如何查找n跳中未連接的節點對?

具有以下CYPHER查詢幼稚的做法實在太慢:

MATCH (n:CELL) 
WITH n 
MATCH (k:CELL) 
WHERE NOT (n)-[:N*1..20]->(k) 
RETURN n, k 

我可以創建第二個關係,K的「距離」屬性,然後匹配,但要爲每個節點這麼做沒有按沒有什麼好的規模(我有18k個節點,所以我需要超過1.6億個新關係)。

在neo4j中有沒有其他方法可以解決這個問題?

回答

2

你可以嘗試使用更有效的最短路徑。

MATCH (n:CELL) 
WHERE shortestPath((n)-[:N*..20]->(k:CELL)) IS NULL 
RETURN n, k 
+0

有沒有匹配K的查詢 - 這仍然會在WHERE子句來之前,對不對?我認爲這是主要的性能問題,因爲它需要18k個節點中的所有兩個節點對,這意味着我選擇了大約3.2億個節點對...... – l4mpi

0

什麼是這樣的:

MATCH p=((n:CELL-[:N*..20]->(k:CELL)) 
WITH n, k, min(length(p)) as minDinstance 
WHERE minDinstance > 20/2 AND n <> k 
RETURN DISTINCT n, k, minDinstance 
相關問題