繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM