簡體   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