模式和模式匹配是Cypher的核心,使用模式来描述所需数据的形状,该模式使用属性图的结构来描述,通常使用小括号()表示节点,-->表示关系,-[]->表示关系和关系的类型,箭头表示关系的方向。

一,节点模式

用小括号表示节点模式:(a),a是节点变量的名称,用于引用图中的某一个节点a。

对于匿名的节点,可以使用()来表示,匿名的节点无法引用,通常用来表示路径中的占位节点。

1,标签模式

在节点变量的后面,使用 :Lable 来表示标签,标签是节点的分组,一个节点可以有一个标签,也可以有多个标签,

比如,(a:User),(a:User:Admin)

2,指定属性

节点和关系都有属性,属性模式可以使用Map结构来表示,属性模式的格式是{ key:value,..},使用大括号表示一个字典,包含一个或多个键/值对:

(a {name: 'Andres', sport: 'Brazilian Ju-Jitsu'})
(a)-[{blocked: false}]->(b)

二,关系模式

关系模式是由节点和路径来描述的,最简单的关系模式两个节点和一个路径:

(a)--(b)

该模式表示节点a和节点b之间存在关系,不指定关系的方向。

1,关系的名称和方向

关系也可以被命名,Cypher使用[r]来表示关系变量:

(a)-[r]-(b)

关系是有方向的,使用箭头指定关系的方向:

(a)-[r]->(b)

注意:图中关系的方向是在创建关系时指定的,在执行Cypher查询时,如果指定关系的方向,那么沿着关系的方向进行模式匹配。

2,关系类型

就像节点具有标签,可以对节点进行分组,关系也可以分组,Neo4j按照关系的类型对关系进行分组

(a)-[r:REL_TYPE]->(b)

但是不像节点可以有多个标签,关系只能由一个关系类型,但是,关系的类型可以属于一个集合,这使用 | 来分割,表示关系输入集合中的任意一个类型:

(a)-[r:TYPE1|TYPE2]->(b)

三,路径模式

路径是由节点和关系构成的序列,在路径中节点和关系是交替相连的,不可中断。路径的长度是指关系的数量,固定长度的路径是指:路径中关系的数量是固定不变的,可变长度的路径是:指路径中关系的数量是可变的。关系的数量有两种表示方式:固定长度和变长。

  • 固定长度的关系,使用[* n]来表示
  • 变长的关系,使用[*start..end]来表示,其中 ..  表示关系的长度是可变的,start表示关系数量的最小值,end表示关系数量的最大值。

注:start和end都可以省略,如果省略start,那么关系的长度 <= end;如果省略end,那么关系的长度>=start;如果同时省略start和end,那么关系的长度是任意的。

在变长关系模式中,也可以指定关系的类型:[Type * start .. end ],变长关系只能用于MATCH查询语句中,不能用于CREATE和MERGE语句中。

1,固定长度的关系

在关系[]中,使用*2表示关系的长度为2,使用该模式来表示路径,路径两端的节点是a和b,路径中间的节点是匿名的,无法通过变量来引用。

(a)-[*]->(b)

该模式描述了3个节点和2个关系,路径两端的节点是a和b,中间节点是匿名节点,等价于以下的模式:

(a)-->()-->(b)

2,变长关系

在关系[]中,使用[*start .. end]来表示变长关系

(a)-[*..]->(b)
(a)-[*..]->(b)
(a)-[*..]->(b)
(a)-[*]->(b)

3,路径变量

Cypher允许对Path命名,把Path赋值给变量p,路径模式可以使用p来表示:

p = (a)-[*..]->(b)

4,举个例子

有如下的有向图数据,按照有向图来计算路径,最长的路径长度是2;按照无向图来计算路径,最长的路径长度是6。

分析以下Cypher查询,在路径模式中,路径是无向的,路径的长度是1或2,关系的类型是KNOWS,节点Filipa和节点remote_friend在同一条路径中,

MATCH (me)-[:KNOWS*..]-(remote_friend)
WHERE me.name = 'Filipa'
RETURN remote_friend.name

参考文档:

Neo4j 第七篇:模式(Pattern)的更多相关文章

  1. ElasticSearch入门 第七篇:分词

    这是ElasticSearch 2.4 版本系列的第七篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  2. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...

  3. 第七篇 Replication:合并复制-订阅

    本篇文章是SQL Server Replication系列的第七篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...

  4. [老老实实学WCF] 第七篇 会话

    老老实实学WCF 第七篇 会话 通过前几篇的学习,我们已经掌握了WCF的最基本的编程模型,我们已经可以写出完整的通信了.从这篇开始我们要深入地了解这个模型的高级特性,这些特性用来保证我们的程序运行的高 ...

  5. 【译】第七篇 Replication:合并复制-订阅

    本篇文章是SQL Server Replication系列的第七篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...

  6. Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检測

    事实上我也非常吃惊-居然写到第七篇了,我估计也就是四篇的内容,感觉非常奇妙,我也不会非常唠叨什么吖);    // 0001 );   // 0001 ); // 0001 这样我们才干监听到它们的碰 ...

  7. awk(2)-模式(pattern)

    在上文 awk(1)-简述我们将简要描述了awk的主要使用方向和构成(由一个或多个模式-动作组成),本小节主要讲述awk的各种模式. ps:例子中使用的输入文件(如countries)内容可由awk( ...

  8. 解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)

    解剖SQLSERVER 第七篇  OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我 ...

  9. 深度分析Linux下双网卡绑定七种模式 多网卡的7种bond模式原理

    http://blog.csdn.net/abc_ii/article/details/9991845多网卡的7种bond模式原理 Linux网卡绑定mode共有七种(~) bond0.bond1.b ...

随机推荐

  1. Greenplum介绍-table

    GP中的table和其它关系型数据表是一样的,除了数据被分布在不同的segment以外. 建表时需定义以下几个方面:1. 指定列和数据类型2. 约束3. 分布策略4. 数据存储方式5. 大表分区策略 ...

  2. node爬虫(简版)

    做node爬虫,首先像如何的去做这个爬虫,首先先想下思路,我这里要爬取一个页面的数据,要调取网页的数据,转换成页面格式(html+div)格式,然后提取里面独特的属性值,再把你提取的值,传送给你的页面 ...

  3. emoji等表情符号存mysql的方法

    项目中需要存储用户信息(用户昵称有表情符号),自然就遇到了emoji等表情符号如何被mysql DB支持的问题 这里引用先行者博文:https://segmentfault.com/a/1190000 ...

  4. 《零基础入门学习Python》【第一版】视频课后答案第003讲

    测试题答案: 0. 以下哪个变量的命名不正确?为什么? (A) MM_520 (B) _MM520_ (C) 520_MM (D) _520_MM(C)选项不正确,因为 Python 中的变量名不能以 ...

  5. SqlServer 2014该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获

    环境:AlwaysOn集群 操作系统:Windows Server 2008 R2 数据库: SQL Server 2014 错误提示:“该日志未截断,因为其开始处的记录是挂起的复制操作或变更数据捕获 ...

  6. RESTful API批量操作的实现

    要解决的问题 RESTful API对于批量操作存在一定的缺陷.例如资源的删除接口: DELETE /api/resourse/<id>/ 如果我们要删除100条数据怎么搞?难道要调用10 ...

  7. django(django项目创建,数据库迁移)

    Django项目的创建与介绍 安装:pip3 install django==1.11 查看版本号:django-admin --version 新建项目: 1.切到目标目录 2.django-adm ...

  8. 关于set和multiset的一些用法

    set的一些用法 set的特性 set的特性是,所有元素都会根据元素的键值自动排序,set不允许两个元素有相同的键值. set的一些常用操作函数 insert() insert(key_value); ...

  9. Luogu 3423 [POI 2005]BAN-银行票据 (多重背包单调队列优化 + 方案打印)

    题意: 给出 n 种纸币的面值以及数量,求最少使用多少张纸币能凑成 M 的面额. 细节: 好像是要输出方案,看来很是头疼啊. 分析: 多重背包,裸体??? 咳咳,好吧需要低调,状态就出来了: dp [ ...

  10. linux 环境下bash脚本中找不到命令

    mr.sh: line 1: HADOOP_CMD: command not found mr.sh: line 4: INPUT_FILE_PATH: command not found mr.sh ...