[英]How to “combine” two nodes and relationships in neo4j using Cypher
我正在用該圖建模“標簽雲”:
(t:Tag {name:'cypher'})-[:IN]->(g:TagGroup)<-[:TAGGED]-(x)
IE:命名標簽是“ TagGroup”的一部分,零個或多個節點被“ TAGGED”連接。 我之所以選擇這種設計,是因為我希望能夠組合兩個或多個命名標簽(例如“ cypher”和“ neo4j”),以便兩個(Tag)
都是新的(TagGroup)
和新的(TagGroup)
[IN]
先前[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
我的主要問題是它僅合並了兩個節點,並且效率不高(盡管我沒有其他選擇可與之比較)。 理想情況下,我可以按名稱組合任意一組(Tag)。
如果可以使用Cypher完成任何想法,如果可以,怎么做?
您可以使用標簽而不是創建單獨的標簽組。
例如。 如果標簽neo4j和cypher屬於標簽組,請說XYZ
MERGE (a:Tag {name: "neo4j"})-[:TAGGED]->(x)
MERGE (b:Tag {name: "cypher"})-[:TAGGED]->(x)
set a :XYZ , b :XYZ
因此,下次您要將特定群組的標簽TAGGED標記到特定帖子x
MATCH (a:Tag:XYZ)-[:TAGGED]->(x) return a.name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.