修改密码

请输入密码
请输入密码 请输入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

      路径模式

      概述

      路径模式用于匹配图中的路径,由三部分依次组成:

      <path pattern> ::=
        [ <path variable declaration> ] [ <path pattern prefix> ] <path pattern expression>
          
      <path pattern expression> ::=
        <path term> | <path term union> | <path term multiset alteration>
      

      路径项

      一个路径项由单个或多个元素模式带括号路径模式带量词路径模式连接组成,并遵循路径的拓扑规则,即以点开始、以点结束,点、边交替出现。

      <path term> ::= 
        <path factor> [ <path factor>... ]
          
      <path factor> ::=
        <element pattern> | <parenthesized path pattern> | <quantified path pattern>
      

      元素模式

      一个路径项可通过点模板和边模板交替连接构建。例如,以下路径项从Brainy出发,通过Joins出边,连接到Club点:

      (:User {name: 'Brainy'})-[:Joins]->(:Club)
      

      通过继续连接点模式和边模式,可创建更为复杂的路径模式。以下路径项描述Brainymochaeach加入同一俱乐部,这些Club点与变量c绑定:

      (:User {name: 'Brainy'})-[:Joins]->(c:Club)<-[:Joins]-(:User {name: 'mochaeach'})
      

      以下路径项通过重复利用变量a,构建起始点相同的环形结构:

      (a:Account)-[:Owns]->(:Card)-[:Transfers]->(:Card)-[:Transfers]->(:Card)<-[:Owns]-(a)
      

      带括号路径模式

      将子路径或完整路径置于一对括号()里即形成一个带括号路径模式:

      <parenthesized path pattern> ::=
        "(" [ <path mode prefix> ] <path pattern expression> [ <where clause> ] ")"
      

      带括号路径模式目前仅可与量词一起使用,构成带量词路径模式

      带量词路径模式

      量词附加在边模式或带括号路径模式上即形成带量词路径模式,可匹配变长路径。

      路径项并集和多集交替

      路径项并集和多集交替功能尚未完全支持。

      <path pattern union> ::=
        <path term> "|" <path term> [ { "|" <path term> }... ]
        
      <path multiset alternation> ::=
        <path term> "|+|" <path term> [ { "|+|" <path term> }... ]
      

      示意图

      CREATE GRAPH myGraph { 
        NODE User ({name string}),
        NODE Club (),
        EDGE Joins ()-[{}]->()
      } PARTITION BY HASH(Crc32) SHARDS [1]
      

      INSERT (rowlock:User {_id: 'U01', name: 'rowlock'}),
             (lionbower:User {_id: 'U02', name: 'lionbower'}),
             (mochaeach:User {_id: 'U03', name: 'mochaeach'}),
             (c01:Club {_id: 'C01'}),
             (c02:Club {_id: 'C02'}),
             (rowlock)-[:Joins]->(c01),
             (lionbower)-[:Joins]->(c01),
             (lionbower)-[:Joins]->(c02),
             (mochaeach)-[:Joins]->(c02)
      

      路径模式并集使用竖线|合并路径项,绑定到同一变量的记录会合并,重复项会被舍弃。

      MATCH ({_id: "C01"})<-[:Joins]-(u:User) | ({_id: "C02"})<-[:Joins]-(u:User)
      RETURN COLLECT_LIST(u.name) AS names
      

      结果:

      names
      ["rowlock", "lionbower", "mochaeach"]

      路径多集交替使用多集交替运算符|+|合并路径项,绑定到同一变量的记录会合并,重复项会保留。

      MATCH ({_id: "C01"})<-[:Joins]-(u:User) |+| ({_id: "C02"})<-[:Joins]-(u:User)
      RETURN COLLECT_LIST(u.name) AS names
      

      结果:

      names
      ["rowlock", "lionbower", "lionbower", "mochaeach"]

      请留意,路径模式并集和路径多集交替中的路径项只能引用在该路径项中声明的元素变量。例如,以下查询存在语法错误:

      MATCH (:Club {code: "C01"})<-[]-(a) | 
            (:Club {code: "C02"})<-[]-(b WHERE a.name = b.name)
      RETURN a, b
      

      路径模式前缀

      路径模式前缀有两种:

      <path pattern prefix> ::=
        <path mode> | <path search>
      
      <path mode> ::= 
        "TRAIL" | "SIMPLE" | "ACYCLIC" | "WALK"
      
      <path search> ::= 
          "ALL" [ <path mode> ]
        | "ANY" [ <non negative integer> ] [ <path mode> ]
        | "ALL SHORTEST" [ <path mode> ]
        | "ANY SHORTEST" [ <path mode> ]
        | "SHORTEST" <non negative integer> [ <path mode> ] 
        | "SHORTEST" [ <non negative integer> ] [ <path mode> ] < "GROUP" | "GROUPS" >
      

      示例图

      CREATE GRAPH myGraph { 
        NODE Card (),
        EDGE Transfers ()-[{}]->()
      } PARTITION BY HASH(Crc32) SHARDS [1]
      

      INSERT (c01:Card {_id: 'C01'}),
             (c02:Card {_id: 'C02'}),
        	   (c03:Card {_id: 'C03'}),
             (c04:Card {_id: 'C04'}),
             (c01)-[:Transfers]->(c02),
             (c01)-[:Transfers]->(c04),
             (c02)-[:Transfers]->(c03),
             (c03)-[:Transfers]->(c02),
             (c03)-[:Transfers]->(c04)
      

      路径约束

      路径约束前缀控制路径的遍历方式以及是否可以重复访问点或边。路径约束可放在路径模式表达式或带括号路径模式的开头。

      路径约束
      描述
      TRAIL 默认项,有重复边的路径不会被返回
      ACYCLIC 有重复点的路径不会被返回
      SIMPLE 有重复点的路径不会被返回,除非重复点为起点和终点
      WALK 没有限制

      暂不支持ACYCLICSIMPLEWALK

      以下两条查询寻找C01C02的1~3步路径,其中所有边为出边,分别使用TRAIL(默认)和ACYCLIC路径约束:

      MATCH p = ({_id: 'C01'})->{1,3}({_id: 'C02'})
      RETURN p
      

      MATCH p = ACYCLIC ({_id: 'C01'})-[:Transfers]->{1,3}({_id: 'C02'})
      RETURN p
      

      结果:p

      路径选择

      路径选择前缀从每个分区[1]选择一个有限的结果子集。路径选择前缀只能放在路径模式表达式开头。

      路径选择
      描述
      ALL 默认项,不做选择
      ANY 从每个分区选择一条路径;非确定性选择
      ANY k 从每个分区选择k[2]条路径;非确定性选择
      ALL SHORTEST 从每个分区选择所有最短路径
      ANY SHORTEST 从每个分区选择一条最短路径;非确定性选择
      SHORTEST k 从每个分区选择k条最短路径;非确定性选择
      SHORTEST k GROUP 根据路径长度对路径进行分组并按长度升序排列,再从每个分区选择前k组的所有路径;确定性选择

      [1]分区:理论上根据不同的起、终点点对,对路径模式匹配的结果进行分区。
      [2]k为非负整数。若路径数量少于k,则保留全部路径。

      关于选择最短路径,详见最短路径

      以下两条查询寻找C01C03间的两步路径,分别选择ALL(默认)和ANY

      MATCH p = ({_id: 'C01'})-()-({_id: 'C03'})
      RETURN p
      

      MATCH p = ANY ({_id: 'C01'})-()-({_id: 'C03'})
      RETURN p
      

      结果:p

      组合使用

      路径模式支持单独或同时使用路径约束和路径选择。

      本查询返回任意一条以C01为起点且没有环路的路径,经过1~3条出向Transfers边到达任意Card点:

      MATCH p = ANY ACYCLIC (c:Card {_id: 'C01'})-[:Transfers]->{1,3}(:Card)
      RETURN p
      

      该路径项本身可匹配5条路径。首先,包含重复点C02的路径被路径约束ACYCLIC舍弃;随后,路径选择ANY从每个分区随机选择一条路径;最终返回三条路径。

      路径变量

      在路径模式表达式开头使用运算符=声明路径变量。路径变量绑定一组边。

      路径变量p绑定由Follows出边连接任意两个点的路径:

      MATCH p = ()-[:Follows]->()
      RETURN p
      

      特殊说明

      点模式并置

      当两个点模式并置时,它们绑定到同一个点,并合并过滤条件。

      本例中,u1u2隐式合并为(u1|u2:User {name: "Claire"})(此处的运算符|仅用于说明):

      (u1:User)(u2 {name: "claire"})-[:Follows]-(u3)
      

      点模式并置仅支持带量词路径模式

      边模式并置

      理论上两个并置的边模式间存在一个空点模式。例如,

      (:User)-[]--[]-(u)
      

      此路径项隐式扩展为:

      (:User)-[]-()-[]-(u)
      

      在路径项中,不可将右侧带有减号的标记(]-<--)与左侧带有减号的标记(-[->-)并置,因为这种组合会引入注释符号--。详情参考注释

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