Star

社交二度关系查询

譬如一个社交网络,A认识B,B认识C;A和C不认识,是一个可能产生的社交关系。
请问,怎么把这种关系查询出来?也就是 A -> [] -> C.
类似于Graphframes的Motif Finding算法:https://graphframes.github.io/graphframes/docs/_site/user-guide.html#motif-finding。

这个是否可以由路径算法得出呢?计算A -> C之间是否有一个路径,可以参考这里:https://docs.nebula-graph.io/manual-EN/2.query-language/4.statement-syntax/4.graph-algorithms/find-path-syntax/

不可以吧。路径算法,A 和 C是事先确定知晓的。但社交二度关系查询中,C是未知的。

如果B,C都是未知,只能二度查询根据A查询出来的B用户(有可能是多个),继续查询到C(也有可能是多个),目前没有直接的语句支持

go 2 steps 语法:

GO 2 STEPS FROM 103 OVER follow;

https://github.com/vesoft-inc/nebula/blob/546f85e50760177a7fc2fde565574d78df561600/docs/manual-CN/2.query-language/4.statement-syntax/2.data-query-and-manipulation-statements/go-syntax.md

嗯,似乎目前也只能在客户端做两步查询,然后在做数据筛选了。

GO 2 STEPS是可以查出2度关系出来,但不能排除掉跟A已建立关系的状况。
不知能不能加入一个NOT IN subQuery之类的语法?

嗯,我们已经收集了记录这个需求

这个就是一个典型的好友推荐场景,是可以用query组合出来的——我稍后写一下。

但是现在没有 Cypher not in path 那种语法糖。

1赞
GO 2 STEPS OVER friendship FROM user_a \
MINUS\
GO OVER friendship FROM user_a \
YIELD ...

https://github.com/vesoft-inc/nebula/blob/d50504660b1c47ac89f04f908e66acf093a006fa/docs/manual-CN/2.query-language/2.functions-and-operators/set-operations.md#minus

多谢。我回头试一下。

您好 这个路径算法是否能够解决下面这个需求:有两个已知的点 找2点之间的路径

这里是路径算法的文档:https://docs.nebula-graph.io/manual-EN/2.query-language/4.statement-syntax/4.graph-algorithms/find-path-syntax/ ,应该符合你的需求,可以求全路径或者最短路。

好的 可以返回边的属性吗 我看文档上只有edge_name

点的属性值也想获得…

目前应该无法通过全路径算法直接返回带属性的结果,你可以通过路径算法查到的点/边,结合fetch语法查询到对应的属性:https://docs.nebula-graph.com.cn/manual-CN/2.query-language/4.statement-syntax/2.data-query-and-manipulation-statements/fetch-syntax/#_1

1赞

浙ICP备20010487号