如何查询同关系出边数量等于2的点,并返回其这些点的图

代码如下:查询用户邀请其他用户数量大于1的关系,并返回用户,被邀请用户,被邀请用户手机号码的图
match (x:userid)-[n:to_invite]->(y:userid) with id(x) as vid,count(n) as times limit 10
match p=(x:userid)-[n:to_invite]->(y:userid)-[m:join]->(z:mobile) where times > 1 and id(x) in [vid] return p

问题:1、是否有更简单方法 2、查询速度很慢,40s

可以参考下

match (v:player)-[f:follow]->(w:player)-[s:serve]->(t:team) with distinct id(v) as vid, collect(id(w)) as dstvid, collect(id(t)) as phone where size(dstvid) > 1 return vid,dstvid,phone

我如何返回整个图呢,包含其节点与关系

match p=(x:userid)-[n:to_invite]->(y:userid)-[m:join]->(z:mobile)
with distinct id(x) as uvid,collect(n) as edgen,collect(id(y)) as dstvid,collect(m) as edgem,collect(id(z)) as mobile
where size(edgen)>1 return uvid,edgen,dstvid,edgem,mobile limit 10
这样好像是可以的,查询需要16s,是否还可以有优化空间呢

节点和关系上面的都有了啊。还缺什么?

不加 p=,大概需要多长时间?

另外,collect(n)、collect(m)如果有明确的属性的话,可以只 collect 对应属性,可能会好一些

match (x:userid)-[n:to_invite]->(y:userid)-[m:join]->(z:mobile)
with distinct id(x) as uvid,collect(n) as edgen,collect(id(y)) as dstvid,collect(m) as edgem,collect(id(z)) as mobile
where size(edgen)>1 return uvid,edgen,dstvid,edgem,mobile limit 10
现在这个代码已经完整了,因为需要返回点,边的其他属性,这样去跑12s

如果不用 go 语句的话,语句本身差不多没有太多的优化空间了。除非你边上的属性可能不是全要,可以删减一部分;
另外,就是对 space 的配置、软硬件资源等优化了。这个最好看下 profile。以及 space 的配置信息

好的,感谢老师哈

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。