cypher语法问题
发布于 6 年前 作者 hexiaojie 2863 次浏览 来自 问答

image.png 上图表示3级关联,一级节点关联到二级节点然后二级节点关联到3级节点,想找到某些3级节点在各个二级节点的节点,比如说3级节点H,4个二级节点都可以关联到它,那么它和就是100%以此类推,请问有啥方法更快找出这些节点

5 回复

假设你查询x,y,z三类节点(label是x,y,z) 对应x[A],y[B,C,D,E],z[F,G,H,I,J,K] match p=(n:x)-[r1]->(n_1:y)-[r2]->(n_2:z) return n_2,count(distinct r2) 这就是查寻第三层节点有多少个二级关系

您这个能查询第三层节点有多少个二级关系,但我也想获取第二层节点的总数,可以在一个语句中实现么?

@hexiaojie 你其实是想获取 与第一层节点关联最紧密的第三层节点 对吧? 建议了解下closeness算法,algo插件包提供了api 汇总二层节点数增加一个聚合函数就好了
->return n_1,count(distinct r2) as cn_r,count(distinct y) as cn_n

看来一下closeness算法,看了algo插件提供的api,还是有些不明白,这个api的label是一个,能处理这种有3类lable的么?如果能,能不能依照上面的图给我一个例子呢,没啥搞懂,谢谢

@hexiaojie CALL algo.closeness(‘match (n:weight_cln) return id(n) as id’,‘match (n:weight_cln)-[r:watching]-(n_e:weight_cln) return id(n) as source,id(n_e) as target’,{write:true, writeProperty:‘closeness’,graph:‘cypher’, concurrency:4}) closeness是给所有的节点直接计算一个权重,你需要给需要参与计算的节点提前打上一个label

回到顶部