修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

v5.0
搜索
    v5.0

      AB

      概述

      使用语句ab().src().dest().depth()可以获取两组点之间的路径,该语句将src()中的每个点与dest()中的每个点配对,进行路径查找。如果src()指定了n个点,dest()指定了m个点,那么共有n * m组点需要考虑。

      ab().src(<filter?>).dest(<filter?>).depth(<range>)
      
      • 语句别名:类型为PATH
      • 方法:
      方法
      参数
      描述
      可选
      别名类型
      src() <filter?> 将过滤条件包裹在{}中,或使用别名指定遍历的起点集。 留空时会作用在所有点上 NODE
      dest() <filter?> 将过滤条件包裹在{}中,或使用别名指定遍历的终点集。留空时会作用在所有点上 NODE
      depth() <range> 遍历步数,即路径中的边数(N≥1):
      • depth(N):N条边
      • depth(:N): 1~N条边
      • depth(N:M):N~M条边
      N/A
      shortest() <weight?> 留空则查询不加权的最短路径;若使用@<schema>.<property>格式指定某个数值型边属性,则查询加权后的最短路径。加权属性不可有负值,而不具备指定属性的边将被忽略。仅支持使用depth(N)来查找N步内的最短路径 N/A
      node_filter() <filter?> 将针对路径里中介点的过滤条件包裹在{}中。留空则不应用任何过滤条件 N/A
      edge_filter() <filter?> 将针对路径中边的过滤条件包裹在{}中。留空则不应用任何过滤条件 N/A
      path_ascend() <property> 使用@<schema>.<property>格式指定某个数值型边属性,查找从src()dest()该属性值递增的路径;没有该属性的边将被忽略 N/A
      path_descend() <property> 使用@<schema>.<property>格式指定某个数值型边属性,查找从src()dest()该属性值递减的路径;没有该属性的边将被忽略 N/A
      direction() <leftRight> 指定路径中所有边的方向,可以为leftright N/A
      no_circle() / 剔除包含环路的路径;一种情况例外,就是当src()dest()指定了相同点且而该点不是中介点,仍将返回相关路径 N/A
      limit() <N> 限制每个点对返回的路径数量(N≥-1);-1表示返回所有路径 N/A

      示例图集

      在一个空图集中,逐行运行以下语句,创建示例图集:

      create().edge_property(@default, "weight", int32)
      insert().into(@default).nodes([{_id:"A"}, {_id:"B"}, {_id:"C"}, {_id:"D"}, {_id:"E"}, {_id:"F"}])
      insert().into(@default).edges([{_from:"A", _to:"C", weight:1}, {_from:"E", _to:"B" , weight:1}, {_from:"A", _to:"E" , weight:4}, {_from:"D", _to:"C" , weight:2}, {_from:"E", _to:"D" , weight:3}, {_from:"B", _to:"A" , weight:2}, {_from:"F", _to:"A" , weight:4}])
      

      查找多种长度路径

      N步内路径

      查找起点为AC,终点为DE的3步内路径:

      ab().src({_id in ["A", "C"]}).dest({_id in ["D", "E"]}).depth(:3) as p 
      return p
      

      A <- B <- E -> D
      A -> C <- D
      A -> E -> D
      C <- A -> E -> D
      C <- D
      A <- B <- E
      A -> C <- D <- E
      A -> E
      C <- A <- B <- E
      C <- A -> E
      C <- D <- E
      

      N步路径

      查找起点为AC,终点为DE的3步路径:

      ab().src({_id in ["A", "C"]}).dest({_id in ["D", "E"]}).depth(3) as p 
      return p
      

      A <- B <- E -> D
      C <- A -> E -> D
      A -> C <- D <- E
      C <- A <- B <- E
      

      N到M步路径

      查找起点为AC,终点为DE的2到3步路径:

      ab().src({_id in ["A", "C"]}).dest({_id in ["D", "E"]}).depth(2:3) as p 
      return p
      

      A <- B <- E -> D
      A -> C <- D
      A -> E -> D
      C <- A -> E -> D
      A <- B <- E
      A -> C <- D <- E
      C <- A <- B <- E
      C <- A -> E
      C <- D <- E
      

      查找无权重最短路径

      查找起点为A,终点为D的5步内最短路径:

      ab().src({_id == "A"}).dest({_id == "D"}).depth(5).shortest() as p 
      return p
      

      A -> C <- D
      A -> E -> D
      

      查找加权最短路径

      查找起点为A,终点为D,根据属性@default.weight加权计算的5步内最短路径,并计算路径的总权重:

      ab().src({_id == "A"}).dest({_id == "D"}).depth(5).shortest(@default.weight) as p
      call {
        with p
        uncollect pedges(p) as edges
        return sum(edges.weight) as weights
      }
      return p, weights
      

      结果:

      p weights
      A -> C <- D 3

      过滤中介点

      查找起点为F,终点为E,且不经过点D的5步内路径:

      ab().src({_id == "F"}).dest({_id == "E"}).depth(:5).node_filter({_id != "D"}) as p
      return p
      

      F -> A <- B <- E
      F -> A -> E
      

      过滤边

      查找起点为A,终点为E,且每条边的weight属性大于1的3步内路径:

      ab().src({_id == "A"}).dest({_id == "E"}).depth(:3).edge_filter({weight > 1}) as p
      return p
      

      A -> E
      

      升序或降序边属性值

      查找起点为A,终点为E,边属性@default.weight升序的3步内路径:

      ab().src({_id == "A"}).dest({_id == "E"}).depth(:3).path_ascend(@default.weight) as p
      return p
      

      A -> C <- D <- E
      A -> E
      

      查找起点为A,终点为E,边属性@default.weight降序的3步内路径:

      ab().src({_id == "A"}).dest({_id == "E"}).depth(:3).path_descend(@default.weight) as p
      return p
      

      A <- B <- E
      A -> E
      

      设置边方向

      查找起点为AC,终点为E,边方向指向左的2到4步路径:

      ab().src({_id in ["A", "C"]}).dest({_id == "E"}).depth(2:3).direction(left) as p
      return p
      

      A <- B <- E
      C <- A <-B <- E
      C <- D <- E
      

      剔除带有环路的路径

      查找起点为A,终点为E,且不包含任何环路的4步路径:

      ab().src({_id == "A"}).dest({_id == "C"}).depth(4).no_circle() as p
      return p
      

      A <- B <- E -> D -> C
      

      如果不适用no_circle()方法,将返回3条路径:

      ab().src({_id == "A"}).dest({_id == "C"}).depth(4) as p
      return p
      

      A <- B <- E <- A -> C
      A <- B <- E -> D -> C
      A -> E -> B -> A -> C
      

      使用limit()

      查找起点为AC,终点为E的3步内路径,且每个点对只返回一条路径:

      ab().src({_id in ["A", "C"]}).dest({_id == "E"}).depth(:3).limit(1) as p
      return p{*}
      

      A <- B <- E
      C <- A <- B <- E
      

      使用OPTIONAL

      本条查询中,ab()语句执行两次,每次使用n中的一条记录。使用OPTIONAL前缀后,如果没有查询到数据,则返回null

      find().nodes({_id in ["A","C"]}) as n
      OPTIONAL ab().src(n).dest({_id == "D"}).depth(1) as p 
      return p
      

      null
      C <- D
      

      若不使用OPTIONAL前缀,则仅返回一条结果:

      find().nodes({_id in ["A","C"]}) as n
      ab().src(n).dest({_id == "D"}).depth(1) as p 
      return p
      

      C <- D
      
      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写