[英]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.