2016-09-29 130 views
0

我需要在所有節點之間創建具有相同屬性值的關係。創建具有相同屬性的節點之間的關係

例如,我可以使用下面的查詢:

match (p1:Person), (p2:Person) 
where p1 <> p2 and p1.someproperty = p2.someproperty 
merge(p1)-[r:Relationship]-(p2) 
return p1,r, p2 

但是,如果我有節點的200K左右,這個腳本運行相當長。

還有其他更快捷的方式來創建這種關係嗎?

感謝

回答

1

你寫首先創建人節點的所有配對之間的笛卡爾積,則不會過濾每個配對地發現,實際涉及的那些查詢,然後創建關係。這是非常昂貴的,一個n^2操作。

相反,您可能只需要遍歷所有人員節點,然後查找具有該屬性的相應人員節點,並創建關係。

此外,如果您對所涉及的屬性具有索引或唯一約束,則應該看到性能大大提高,否則它將是節點掃描該標籤中的所有節點並進行每次比較,另一個影響緩慢的因素查詢。

此外,如果可能的話,我鼓勵您不要返回節點和關係,假設它處於數千或數十萬個結果的鄰域內。這可能是另一個因素。

match (p1:Person) 
with p1 
match (p2:Person) 
where p2.someproperty = p1.someproperty and p1 <> p2 
merge(p1)-[r:Relationship]-(p2) 

你應該能夠解釋這個查詢和你的舊的查詢,看看它們是如何運行的。

+0

非常感謝!這對我很好 –

相關問題