如何使用Cypher在neo4j中“组合”两个节点和关系

时间:2014-02-20 17:46:24

标签: neo4j cypher

我正在使用图表建模“标签云”:

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

IE:命名标记是“TagGroup”的一部分,零个或多个节点为“TAGGED”。我选择了这个设计,因为我希望能够组合两个或多个命名标签(例如“cypher”和“neo4j”),以便(Tag)[IN]为新(TagGroup)(TagGroup) new [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 的所有节点的并集的端点。

我唯一(不太讨人喜欢)的尝试是:

{{1}}

我的主要问题是它只结合了两个节点,并且效率不高(尽管我没有其他选择来比较它)。理想情况下,我可以按名称组合任意一组(标签)。

如果可以通过Cypher完成任何想法,如果是这样,怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用标签而不是创建单独的标签组。

例如。如果标签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