譬如一个社交网络,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;
嗯,似乎目前也只能在客户端做两步查询,然后在做数据筛选了。
GO 2 STEPS是可以查出2度关系出来,但不能排除掉跟A已建立关系的状况。
不知能不能加入一个NOT IN subQuery之类的语法?
嗯,我们已经收集了记录这个需求
这个就是一个典型的好友推荐场景,是可以用query组合出来的——我稍后写一下。
但是现在没有 Cypher not in path 那种语法糖。
GO 2 STEPS OVER friendship FROM user_a \
MINUS\
GO OVER friendship FROM user_a \
YIELD ...
多谢。我回头试一下。
您好 这个路径算法是否能够解决下面这个需求:有两个已知的点 找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
请问怎么将findpath的结果作为fetch的输入呢
看看管道的使用
https://docs.nebula-graph.com.cn/manual-CN/2.query-language/3.language-structure/pipe-syntax/
find path 返回的是字段是 path类型 可以通过管道作为fetch的输入? fetch的输入是不是vertexid吗
可以提供个demo学习一下吗