2010-03-11 73 views
1

這是一個圖,其節點一次存在於許多連接的組件中,因爲節點的關係是邊組的集合,因此每個邊組只能有一個邊一次出現。我需要能夠找到一個節點存在的所有連接組件。將這個圖存儲在neo4j中以便快速查找節點存在的所有連接組件的最佳方法是什麼?有沒有辦法使用內置遍歷來做到這一點?如何在neo4j中存儲這種圖形以進行快速遍歷?

另外:是否有這種圖形的名稱?我會很感激任何幫助/想法。

更新:

對不起,我沒有說清楚。所有節點都是相同的類型。節點具有可變數量的邊緣組。需要爲特定的連接組件選擇每個邊緣組的一個邊緣。我要去嘗試通過例子來解釋:

Node x1 is related to: (x2 or x3 or x4) AND (x5 or x6) AND (x7) 
Node x2 is related to: (x8) AND (x9 or x10) 

所以X1的第一邊緣集團是(x2, x3, x4),其第二邊緣集團是(x5, x6),其第三邊緣集團是(x7)

所以這裏是x1存在一些連接部件:

CC1:

x1 is related to: x2, x5, x7 
x2 is related to: x8 x9 

CC2:

x1 is related to: x2, x6, x7 
x2 is related to: x8, x9 

CC3:

x1 is related to: x3, x5, x7 

CC4:

x1 is related to: x3, x6, x7 

我在此你的幫助表示感謝。

UPDATE2:

我想我能做到這一點,如果有一個回答這個問題: How can I specify which relationship type to use as a function of the current node at every step of a traversal with neo4j?

回答

1

他們這樣,我明白你的問題,你有很多節點,讓我們稱它們爲X節點,它們連接到許多類型節點(或類似的節點),我們稱這些節點爲的節點。一個X節點可以連接到多個T節點,但是隻有一個連接到每個T節點,或者可能只有一個連接到T節點的每個類型(這裏的描述有點模糊)。

我對這種模型進行建模的方法是對每個(種)T節點使用一個RelationshipType。然後,您可以使用x_node.getRelationships(T_TYPE_ONE,T_TYPE_TWO,...等等)從X節點獲取所有T節點。當你改變一個X節點時,你需要保持你的不變性,即它至多隻能與每個(種)T節點有一個關係。你可以通過使用x_node來完成。getSingleRelationship(THE_T_TYPE_YOURE_MUTATING),如果返回null,則可以安全地添加該類型的新關係,如果它返回關係,則必須在添加新關係之前將其刪除。該模型的(如我把它解釋)

ASCII技術的例子:

(x1)--T_ONE-->(t1a) (t1b)<--T_ONE--(x2)--T_FOUR-->(t4a) 
|\         | 
\ |---T_TWO-->(t2a)    /
    \        /
    |---T_THREE-->(t3a)<--T_THREE---/ 

在X節點上面的例子是T_ONE組件的一部分,但是x1爲T_ONE部件T1A的一部分,並且X 2是部分的t1b。它們都是T_THREE分量t3a的一部分,那麼x1是T_TWO分量t2a的一部分,x2是T_FOUR分量t4a的一部分。在這個例子中查詢看起來是這樣的:

Iterable<Relationship> x1_comps = x1.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR); 
Iterable<Relationship> x2_comps = x2.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR); 

和更新應該是這樣的:

void setComponent(Node xNode, RelationshipType tType, Node tNode) { 
    Relationship current = xNode.getSingleRelationship(tType); 
    if (current != null) current.delete(); 
    xNode.createRelationshipTo(tNode, tType); 
} 

請讓我知道,如果我誤解你的要求,我會很樂意給您的更新說明刺傷。

+0

我已經更新描述爲清楚起見。謝謝! – James 2010-03-11 21:12:28

+0

我認爲我提出的解決方案對更新後的問題描述仍然有效。 – thobe 2010-03-12 12:09:39