1、Cypher 查询语言简单使用

1.1.基本语法

Node语法:

Cypher使用一对圆括号来表示一个节点:提供了多种格式如下:
(  ) 匿名节点
(matrix)  为节点添加一个ID
(:Movie) Movie label标签,声明的是节点类型。noe4j的索引使用label,每个索引由标签和属性组成

(matrix:Movie)
(matrix:Movie {title: "The Matrix"}) 节点属性。 (如:title)代表一个key\value 的List

(matrix:Movie {title: "The Matrix", released: 1997})

RelationShip语法:

--  表示一个无指向的关系

--> 表示一个有指向的关系

[  ] 能够添加ID,属性,类型等信息

-[role]->

-[:ACTED_IN]->    ACTED_IN是标签

-[role:ACTED_IN]->

-[role:ACTED_IN {roles: ["Neo"]}]->

Pattern 语法:

节点和关系语法的合并就表示模式。

(keanu:Person:Actor    {name: "Keanu Reeves"} )

-[role:ACTED_IN    {roles: ["Neo"] } ]->

(matrix:Movie    {title: "The Matrix"} )

Pattern Identifiers :

为模式分配ID,为例增加模块化和重复使用

acted_in = (:Person)-[:ACTED_IN]->(:Movie)

1.2.模式实践

bin/neo4j-shell(或者cypher-shell)

创建一个节点数据:

CREATE (:Movie { title:"The Matrix",released:1997 }) ;

如果想返回创建的数据,需要指定ID:

create (p:Person {name:"weiw", born:2000}) return p;

创建多个节点数据,多个元素间用逗号或者用create分开:

create (a:Person {name:"jiaj",born:2003})-[r:ACTED_IN {roles:["student"]}]->(m:School {name:"CDLG",address:"chengdu"})

create (d:Person {name:"weiw",born:2001})-[:DIRECTED]->(m)

return a,d,r,m;

Matching Patterns :模式匹配

我们想连接新的数据到已经存在的结构,这个需求需要我们知道怎样找到在图中已经存在的模式。

match (m:School) return m;

match (p:Person {name:"weiw"}) return p;

match (p:Person {name:"jiaj"})-[r:ACTED_IN]->(m:School)  return m.name, r.roles;

Attaching Structures:

将match和create进行合并使用。将匹配到的节点连接到一个新的节点上。

match (p:Person {name:"jiaj"})

create (m:School {name:"DEJY",address:"deyang"})

create (p)-[r:ACTED_IN {roles:["studeng"]}]->(m)

return p,r,m;

Completing Patterns :

merge在查找时,如果找到则返回,如果没找到则创建。可以避免创建重复的节点

merge (m:School {name:"SCDX"})

on create set m.address="chegndu"

return m;

MATCH (m:School { name:"CDLG" })

MATCH (p:Person { name:"jiaj" })

MERGE (p)-[r:ACTED_IN]->(m)

ON CREATE SET r.roles =['teacher']

RETURN p,r,m ;

之前的案列中,关联的方向是随意的,你可以改变箭头的指向。MERGE 会检查关联两边的方向,如果没有匹配到关系,则创建一个新的方向的关系。

CREATE (y:Year { year:2014 })

MERGE (y)<-[:IN_YEAR]-(m10:Month { month:10 })

MERGE (y)<-[:IN_YEAR]-(m11:Month { month:11 })

RETURN y,m10,m11 ;

1.3.Getting the Results You Want

数据准备:以人在电影中扮演的角色为例

CREATE (matrix:Movie { title:"The Matrix",released:1997 })

CREATE (cloudAtlas:Movie { title:"Cloud Atlas",released:2012 })

CREATE (forrestGump:Movie { title:"Forrest Gump",released:1994 })

CREATE (keanu:Person { name:"Keanu Reeves", born:1964 })

CREATE (robert:Person { name:"Robert Zemeckis", born:1951 })

CREATE (tom:Person { name:"Tom Hanks", born:1956 })

CREATE (tom)-[:ACTED_IN { roles: ["Forrest"]}]->(forrestGump)

CREATE (tom)-[:ACTED_IN { roles: ['Zachry']}]->(cloudAtlas)

CREATE (robert)-[:DIRECTED]->(forrestGump)

Filtering Results :数据过滤

常用谓词:AND, OR, XOR,NOT

match (m:Movie) where m.title="The Matrix" return m;

MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)

WHERE p.name =~ "K.+" OR m.released > 2000 OR "Neo" IN r.roles

RETURN p,r,m ;

最后一个角色条件没有完全匹配上:

MATCH (p:Person)-[:ACTED_IN]->(m)

WHERE NOT (p)-[:DIRECTED]->()

RETURN p,m ;

Returning Results :结果返回

返回 numbers, strings and arrays as [1,2,3], and maps like {name:"Tom Hanks", born:1964, movies:["Forrest Gump", ...], count:13}.

常用表达式:

names[0] ,movies[1..-1].  length(array), toInt("12"), substring("2014-07-01",0,4), or coalesce(p.nickname,"n/a") ,DISTINCT

MATCH (p:Person) 

RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,"n/a") AS nickname, { name: p.name, label:head(labels(p))} AS person;

Aggregating Information:聚合操作

常用聚合: count, sum, avg, min, max,count(DISTINCT role),NULL值自动跳过

MATCH (:Person)   RETURN count(*) AS people

To find out how often an actor and director worked together, you’d run this statement:

MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person)

RETURN actor,director,count(*) AS collaborations

Ordering and Pagination :排序和分页

排序用法:ORDER BY person.age

分页用法:SKIP {offset} LIMIT {count}

MATCH (a:Person)-[:ACTED_IN]->(m:Movie)

RETURN a,count(*) AS appearances

ORDER BY appearances DESC LIMIT 10;

Collecting Aggregation:聚集聚合

collects all aggregated  values into a real array or list。

MATCH (m:Movie)<-[:ACTED_IN]-(a:Person)

RETURN m.title AS movie, collect(a.name) AS cast, count(*) AS actors

1.4.Compose Large Statements:编写大型语句

UNION:

MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)

RETURN p,type(r) AS rel,m

UNION

MATCH (p:Person)-[r:DIRECTED]->(m:Movie)

RETURN p,type(r) AS rel,m

WITH:

1.5.Utilizing Data Structures

MATCH (m:Movie)<-[:ACTED_IN]-(a:Person)

RETURN m.title AS movie, collect(a.name)[0..5] AS five_of_cast

List谓词:

When using lists and arrays in comparisons you can use predicates like value IN list or any(x IN list

WHERE x = value). There are list predicates to satisfy conditions for all, any, none and single elements.

MATCH path =(:Person)-->(:Movie)<--(:Person)

WHERE ALL (r IN rels(path) WHERE type(r)= 'ACTED_IN') AND ANY (n IN nodes(path) WHERE n.name = 'Clint  Eastwood') 

RETURN path

List处理:

you want to process lists to filter, aggregate (reduce) or transform (extract) their values.

WITH range(1,10) AS numbers

WITH extract(n IN numbers | n*n) AS squares

WITH filter(n IN squares WHERE n > 25) AS large_squares

RETURN reduce(a = 0, n IN large_squares | a + n) AS sum_large_squares;

MATCH (m:Movie)<-[r:ACTED_IN]-(a:Person)

WITH m.title AS movie, collect({ name: a.name, roles: r.roles }) AS cast

RETURN movie, extract(c2 IN filter(c1 IN cast WHERE c1.name =~ "T.*")| c2.roles)

Unwind Lists:列表展开

you have collected information into a list, but want to use each element individually as a row。For instance, you might want to further match patterns in the graph.

MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(colleague:Person)

WITH colleague, count(*) AS frequency, collect(DISTINCT m) AS movies

ORDER BY frequency DESC LIMIT 5 UNWIND movies AS m

MATCH (m)<-[:ACTED_IN]-(a)

RETURN m.title AS movie, collect(a.name) AS cast

1.6.Labels, Constraints and Indexes

使用约束: title被唯一化约束

adding the unique constraint will add an index on that property。

CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE

查看索引:

CREATE INDEX ON :Actor(name)

CREATE (actor:Actor { name:"Tom Hanks" }),(movie:Movie { title:'Sleepless IN Seattle' }), (actor)-[:ACTED_IN]->(movie);

标签:

MATCH (actor:Actor { name: "Tom Hanks" })  SET actor :American return actor;

删除标签:

MATCH (actor:Actor { name: "Tom Hanks" })  REMOVE actor:American;

官方文档手册下载地址:http://download.csdn.net/detail/wangweislk/8983743

neo4j图数据库--Cypher入门相关推荐

  1. Neo4j图数据库从入门到精通

    add by zhj: 转载时,目录没整理好,还会跳转到原文 其实RDB也可以存储多对多的关系,使用的是中间表,GDB使用的是边,RDB中的实体存储在数据表,而GDB存储在节点.两者使用的底层技术不同 ...

  2. neo4j图数据库Cypher语句

    目录 create创建节点 修改已有节点: Cypher是一种声明式的图数据库查询语言. Cypher采用一对圆括号来表示节点,(): 括号内为节点的信息,如(n:movie{title:" ...

  3. Task 5 Cypher 介绍及Neo4j 图数据库查询

    Datawhale 知识图谱组队学习 Task 5 Neo4j 图数据库查询 一. Neo4介绍 二. Neo4j 介绍 3.1 Cypher 介绍 3.2 Neo4j 图数据库 查询 四. 基于知识 ...

  4. neo4j︱图数据库基本概念、操作罗列与整理(一)

    图数据库常规的有:neo4j(支持超多语言).JanusGraph/Titan(分布式).Orientdb,google也开源了图数据库Cayley(Go语言构成).PostgreSQL存储RDF格式 ...

  5. Neo4j教程 Neo4j视频教程 Neo4j 图数据库视频教程

    课程发布地址 地址: 腾讯课堂<Neo4j 图数据库视频教程> https://ke.qq.com/course/327374?tuin=442d3e14 作者 庞国明,<Neo4j ...

  6. Neo4j资料 Neo4j教程 Neo4j视频教程 Neo4j 图数据库视频教程

    课程发布地址 地址: 腾讯课堂<Neo4j 图数据库视频教程> https://ke.qq.com/course/327374?tuin=442d3e14 作者 庞国明,<Neo4j ...

  7. Pyhton操作Neo4j图数据库实践(南北朝隋唐历史北朝主要人物知识图谱)

    独孤信"第一岳父"之称很形象,他有三个女儿做了三个朝代皇后,以及杨坚.杨广.李渊等人关系.本文试着使用图数据库(neo4j)表达这段南北朝隋唐历史北朝主要人物知识图谱. 1. Ne ...

  8. Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 14.04.4 LTS ...

  9. Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 16.04.1 LTS ...

  10. neo4j图数据库基本概念

    简介:本文以电影关系图为例,解释neo4j图数据库中的基本概念 电影关系图 下图中的圆圈表示三个节点(node),每个节点都有表示类别的标签(label)和属性(properties),如:name. ...

最新文章

  1. python开发好学吗-python难学吗
  2. mybatis 使用in 查询时报错_使用mybatis的resultMap进行复杂查询 057
  3. Blazor Server 和 WebAssembly 应用程序入门指南
  4. jzoj3860-地壳运动(mst)【最小生成树,三分】
  5. win10高危服务_IPv6用户危险了!Win10出现严重安全漏洞
  6. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_7 获取Servlet原生的API
  7. 静静期待 Windows 7 的到来
  8. 学习效率不高,换个思路试试
  9. 安装ALEXA工具条
  10. 虚幻4学习笔记(1)基本操作和插件导入
  11. 储量级别122b_储量级别代码是什么
  12. android退出中国,曾经的安卓机皇宣布关闭中国社区,彻底放弃手机业务了?
  13. java 场景面试题_Java面试场景整理收录
  14. SpringBoot整合Validation进行参数校验
  15. ceph rbd mysql_Ceph实践之rbd
  16. 跟着Nature学作图:最强“ 颠覆性 ”技术,您确定不学学?助力发Nature顶刊!...
  17. 上传文件超过1Mb,返回413错误
  18. Eclipse英文版视频教程(from Carleton University)
  19. 怎样用计算机合并视频,怎么合并视频和字幕 格式工厂视频字幕合并教程-电脑教程...
  20. EasyCVR如何实现视频监控的大屏播放?

热门文章

  1. html5苹果手机视频不自动播放,HTML5 解决苹果手机不能自动播放音乐问题
  2. 05.SQL Server(高级查询)
  3. 小猪佩奇与Tom猫的一场内网友谊赛
  4. E. Fruit Slicer--计算几何+两圆公切线
  5. 综述:基于深度学习的文本分类 --《Deep Learning Based Text Classification: A Comprehensive Review》总结(二)
  6. putty怎么连到linux服务器,PuTTY 从 Windows 连接到 亚马逊服务器Linux 实例
  7. 西游记笔记与想法(2)
  8. 在js中为什么0.1+0.2不等于0.3
  9. [C# Fundamantal] 类继承简析
  10. 《大数据架构和算法实现之路:电商系统的技术实战》——3.2 案例实践