簡體   English   中英

如何在 Neo4j 中將同一社區的節點與 Cypher 合並?

[英]How to merge nodes of the same community with Cypher in Neo4j?

有一個圖,它的每個節點都包含屬性communityId來指示該節點屬於哪個社區。 節點之間以LINK關系連接,其中包含weight屬性。

我想要的是將同一社區的那些節點合並成一個大節點。 這些大節點(又名社區)之間的鏈接必須合理合成/組合:必須根據每個社區中相互連接的各個節點,將鏈接的weight屬性相加。 必須遵守鏈接的方向。

在結果圖中,我只會看到連接的社區節點。

最接近的函數是Merge Nodes ,函數apoc.refactor.mergeNodes() 但是,我對結果不滿意,因為:

  • 問題一:結果社區節點有自鏈接。
  • 問題 2:盡管文檔如此說明,但鏈接的權重並未合並。

問題 1 可以通過再編寫一個 Cypher 來消除自鏈接來解決。 但是問題 2 只能通過對 Graph 的低級訪問來解決(如上面的mergeNodes() )。

有沒有什么優雅的方法可以一次性獲得我想要的圖(社區節點)? 或者至少,必須以某種方式解決問題 2。

再現性

圖形:

CREATE (a:User {name: "A", communityId: 2}), (b:User {name: "B", communityId: 2}), (c:User {name: "C", communityId: 2}), (x:User {name: "X", communityId: 1}), (y:User {name: "Y", communityId: 1}), (z:User {name: "Z", communityId: 1}), (w:User {name: "W", communityId: 1}), (a)-[:LINK {weight: 1}]->(b), (b)-[:LINK {weight: 1}]->(c), (c)-[:LINK {weight: 1}]->(a), (b)-[:LINK {weight: 1}]->(z), (z)-[:LINK {weight: 1}]->(x), (z)-[:LINK {weight: 1}]->(w), (w)-[:LINK {weight: 1}]->(y), (y)-[:LINK {weight: 1}]->(x), (b)-[:LINK {weight: 1}]->(w)

在此處輸入圖片說明

暗號:

MATCH (n:User)
WITH n.communityId AS communityId, COLLECT(n) AS nodes
CALL apoc.refactor.mergeNodes(nodes, {
    properties: {
        name: 'combine',
        communityId: 'discard',
        weight: 'combine'
    },
    mergeRels: true
})
YIELD node
RETURN node

在此處輸入圖片說明

系統要求

  • 視窗 8.1 x64
  • Neo4j 桌面 v1.3.4 (引擎 v4.1.1.)
  • APOC v4.1.0.2
  • 圖數據科學圖書館 v1.3.2

我不太確定為什么 APOC 沒有合並您示例中的關系。 但是,這里有一個 Cypher 查詢可以幫助您入門:

MATCH (n:User)-[r]->(v:User)
WHERE n.communityId <> v.communityId  // discard self loop
WITH n.communityId as comId1, v.communityId as comId2, sum(r.weight) as w
MERGE (su1:SuperUser {communityId: comId1})  // create or get merged node for n.communityId
MERGE (su2:SuperUser {communityId: comId2})  // create or get node for v.communityId
MERGE (su1)-[r:SUPER_LINK]->(su2)
ON CREATE SET r.weight = w  // set relationship weight when it is created
RETURN su1, su2, r

這將創建以下節點和關系:

超級節點和超級鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM