请教Neo4j-Cypher匹配多个标签的查询
发布于 5 年前 作者 123abc 4837 次浏览 来自 问答

图谱如图所示,A和B分别是一个图谱里的两个主体节点,其他都是附属于它们的节点。 现在的任务是得到如上所示圈内的部分图谱,也就是只把A这个“一级节点”和附属于A的“二级三级节点们”提取出来。 我的查询如下: match(n1:label1{id:‘1’})-[r1]-(m1), match(n2:label2{id:‘24’})-[r2]-(m2), match(n3:label2{id:‘25’})-[r3]-(m3) RETURN n1,n2,n3,m1,m2,m3 这样虽然能得到该图谱,但一旦附属节点很多,得出来的数据库会很慢很慢甚至卡住。 原因可以从table看到,每个节点都被重复了很多次,50个节点可能变成了3000个,但在graph那里部分图谱的显示是没有问题的。 我尝试了return distinct m1是可以的删除重复节点的,但return distinct m1,m2,m3不行,或with [m1,m2,m3] as m,return m也不行。 请问怎么能删除多次匹配导致的那些重复的节点呢?或者是不是可以修改匹配语句? 或者说有什么其他办法可以用于提取部分图谱这个目标呢 谢谢! 绘图1.png

3 回复

看下面例子,是同时匹配’A 标签’, ‘B 标签’

match (n) where any(label in labels(n) WHERE label in ['A 标签', 'B 标签']) return n

@pangguoming 感谢老师的回复! 但现在还有一个问题,我可能上面没讲清楚,就是B也是label1的,和B连接的也有label2的,所以我直接match (n) where any(label in labels(n) WHERE label in [‘label1’, ‘label2’]) return n A和B都会出来。 如果match (n) where any(label in labels(n) WHERE label in [‘公司{id:‘1’}’, ‘概念{id:‘24’}’,‘概念{id:‘25’}’]) return n也不行,就是怎么能匹配多个标签的同时,还能用id属性筛选出其中的想要的节点呢?

提取二三级指定关系的深度不就行了

回到顶部