2014-02-20 63 views
2

我造型「標籤雲」與圖表:如何「結合」兩個節點和關係的Neo4j使用Cypher支架

(t:Tag {name:'cypher'})-[:IN]->(g:TagGroup)<-[:TAGGED]-(x) 

IE:命名標籤是「TagGroup」的一部分,其中零個或多個節點是「標記」的。我選擇這種設計是因爲我希望能夠組合兩個或多個命名標籤(例如「密碼」和「neo4j」),以便兩個(Tag)都是[IN]新的(TagGroup)和新的(TagGroup)是所有節點聯合的端點,之前是[TAGGED]。只有

我的(不是很討好)的嘗試是:

match (t:Tag {name:'cypher'})-[i:IN]->(g:TagGroup), 
(t2:Tag {name:'neo4j'})-[:IN]->(g2:TagGroup)<-[y:TAGGED]-(x) 
create (t2)-[:IN]->(g) 
create unique (g)<-[:TAGGED]-(x) 
with g2 as g2 
match (g2)<-[r]->() delete g2,r 

我的主要問題是,它只是結合了兩個節點,並不會覺得很有效的(雖然我沒有辦法將其與比較) 。理想情況下,我可以按名稱組合任意一組(標籤)。

任何想法,如果這可以用Cypher完成,如果是這樣,如何?

+0

因此,一個特定羣體的標籤,你在找什麼做的是採取2個TagGroups並將它們合併在一起? – Tezra

回答

0

您可以使用標籤而不是創建單獨的標籤組。

例如。如果標籤的Neo4j和CYPHER下標籤組來表示XYZ然後

MERGE (a:Tag {name: "neo4j"})-[:TAGGED]->(x) 
MERGE (b:Tag {name: "cypher"})-[:TAGGED]->(x) 
set a :XYZ , b :XYZ 

因此,下一次你想標記到某一職位X

MATCH (a:Tag:XYZ)-[:TAGGED]->(x) return a.name 
+0

據我瞭解,MERGE創建新的節點和路徑,而不是在節點上組合內容。我不認爲你的解決方案會做我想做的事情,這基本上是可以把兩個現有的關係集合爲一個? – MatAtBread

+0

我假設新標籤neo4j和cypher被創建。現在,set子句將附加一個組標籤XYZ。 –

+0

是的,因爲我開始在我的解決方案中,我建議使用標籤而不是創建單獨的標籤組節點和IN關係 –

相關問題