從Neo4j 1.9.2開始,並使用Cypher查詢語言,我想創建具有特定屬性值的節點之間的關係。 我有一組具有屬性H的節點G,G節點之間當前沒有任何關係。使用一個Cypher查詢創建具有相同屬性值的節點之間的關係
在Cypher語句中,是否有可能通過H屬性值對G節點進行分組,並在每個節點之間創建一個關係HR以成爲同一組?知道每個組的大小在2 & 10之間,並且對於大約50k G節點,我有超過15k個這樣的組(15k個不同的H值)。
我試過很難管理這樣的查詢,卻沒有找到正確的語法。下面是一個小樣本數據集:
create
(G1 {name:'G1', H:'1'}),
(G2 {name:'G2', H:'1'}),
(G3 {name:'G3', H:'1'}),
(G4 {name:'G4', H:'2'}),
(G5 {name:'G5', H:'2'}),
(G6 {name:'G6', H:'2'}),
(G7 {name:'G7', H:'2'})
return * ;
最後,我想這樣的關係:
G1-[:HR]-G2-[:HR]-G3-[:HR]-G1
和:
G4-[:HR]-G5-[:HR]-G6-[:HR]-G7-[:HR]-G4
在另一種情況下,我可能需要更新大量使用/比較一些屬性的節點之間的關係。假設類型爲N的節點和類型爲M的節點,N個節點與M有關,其關係名爲:IS_LOCATED_ON。位置的順序可以作爲N個節點的屬性來存儲(N.relativePosition從1到MAX_POSITION長),但是我們可能稍後需要以這種方式更新圖模型:使N個節點之間通過新的: PRECEDES關係,這樣我們就可以在給定集合上找到更容易和更快的下一個節點N.
我希望這樣的語言可以允許更新大量的節點/關係操縱其屬性。
- 難道不可能嗎?
- 如果不是,是否計劃或可能計劃?
任何幫助將不勝感激。
你好@LameCoder,謝謝你的回答。這個查詢不是很直接,但我理解這個邏輯。 因爲我不需要在節點上創建HR自我關係,所以我們可以添加另一個限制(g1 <> g2),它允許刪除COALESCE語句,因爲我們不需要按名稱命令g2: (g1.H)和HAS(g2.H)AND g1.H = g2.H AND g1≠g2 WITH g1,COLLECT(*),g2 = node(*) WHERE g2)as other WITH g1,HEAD(others)as next CREATE g1 - [:HR] - > next RETURN g1,next; –
(...繼續...) 查詢當前正在運行,但執行真的很長。您的查詢運行時間超過8小時(30052902毫秒),並創建了47412個關係,因爲我在數據集上除外。 看來,2節點START子句是一種糟糕的方法,即使我使用索引來查找g1和g2。 上述更新後的查詢當前正在運行,如果它提高了性能,我會在稍後看到結果,但它在幾個小時後運行,因此這種方法不是一個好的解決方案。使用Java代碼花費幾秒鐘來加載數據並創建關係。 無論如何感謝您的提示@LameCoder。 ;) –
@RaphaelF。這不是一個理想的解決方案。我只是想看看我們可以讓Cypher做什麼,這是一個非常有趣的謎題。像這樣的問題讓我希望有存儲過程。 – LameCoder