本文主要介绍Cypher 查询语言,并对知识图谱进行增删查改操作。

目录

1. 概述

2. 数据类型

2.1数值,布尔,字符串

2.2 节点和关系

2.3 列表

3. 语法

3.1 匹配语句

3.2 创建语句

3.3 混合使用

3.4 MERGE命令

3.5 SET语句

3.6 SHORTESTPATH 函数

3.7 删除语句

3.8 FOREACH 函数

4. 小结


1. 概述

Cypher 是图形数据库 Neo4j 的查询语言,就像SQL在关系型数据库中查询一样。Cypher 受到不同方法的启发,如 WHEREORDER BY 受到了 SQL 的启发,模式匹配则借用了 SPARQL 的表达式方法,一些列表语义借用了 Haskell 和 Python 等语言,Cypher 的构造基于英文散文和简洁的图像,使查询易于编写和阅读。客户端上方的输入栏用于输入 Cypher 语句,按回车或者点击右侧三角形按钮执行 Cypher 语句,shift + 回车 进行换行。

2. 数据类型

Cypher 中有以下几种基本类型

  • 数值
  • 字符串
  • 布尔
  • 节点
  • 关系
  • 列表

2.1数值,布尔,字符串

Cypher 中的数据类型如下

  • boolean 用于表示布尔值:true false
  • byte 用于表示 8 位整数
  • short 用于表示 16 位整数
  • int 用于表示 32 位整数
  • long 用于表示 64 位整数
  • float 用于表示 32 位浮点数
  • double 用于表示 64 位浮点数
  • char 用于表示 16 位字符
  • string 用于表示字符串

数值类型支持的常用算术运算有

  • + 加法运算
  • - 减法运算
  • * 乘法运算
  • / 除法运算
  • % 取余运算
  • ^ 幂运算
// 执行算术运算,用 return 返回结果,不同运算用,隔开
return 1+1,1.2-3,100000*1000,100/200,3%4,2^10,True,false

字符串类型支持的常用函数有

  • toUpper 用于将所有字母更改为大写字母
  • toLower 用于将所有字母改为小写字母
  • SUBSTRING 用于获取给定 String 的子字符串
  • REPLACE 用于替换一个字符串的子字符串
  • SPLIT 用于切分字符串
  • + 用于字符串拼接
// 执行字符串函数,用 return 返回结果
return toUpper('a'),toLower('A'),SUBSTRING('abcdefghijk',1,3),replace('abcde','ab','de'),split('abc,def',','),'1'+'2'

2.2 节点和关系

Cypher 采用一对圆括号 () 来表示节点,如 (n:角色) 表示一个 角色 节点,n 是变量名,供命令执行时用 n 来访问这个节点,在命令执行完毕后就无法使用了。同时单独的 () 表示一个匿名节点,在匹配时表示匹配所有节点。

在关系中

  • -- 表示无方向的关系

  • --> 表示有方向的关系

  • -[r]-> 则给关系赋予一个变量名,方便对这个关系进行操作

  • -[r:配偶]-> 匹配关系为配偶的类型

同时为了书写简单,可以为节点和关系语法赋予一个变量

//将所有 (角色)-[配偶]-() 的子图赋值给变量 p
p = (n:角色)-[r:配偶]-()

这样变量 p 就可以写到多个查询语句中,避免重复编写

2.3 列表

Cypher 支持列表操作,并且和 Python 中的列表很相似。通过 [] 来创建列表,同时与 Python 相同,列表中可以包含不同的元素。

3. 语法

3.1 匹配语句

在 Neo4j 中,MATCH 命令用于从数据库中获取节点,关系的信息,类似于 SQL 中的 SELECTRETURN 则是在 MATCH 搜索完成后返回数据,因此 MATCH 必须与 RETURN 同时使用。

// 根据标签匹配节点
match (n:角色) return n // 匹配所有角色节点// 根据标签和属性匹配节点
match (n:角色{name:'郭靖'}) return n  // 匹配name为郭靖的角色节点// 匹配任意关系
match p = (n)-[r]->(m) return p  // 匹配出有任意关系的两个节点

optional match 类似于 match,不同之处在于 optional match 在匹配不到内容时返回 null 方便查询继续进行,而 match 直接返回查询无结果。

// 用 optional match 匹配郭靖是否有关系到倚天屠龙记
optional match p=(n:角色{name:'郭靖'})-[r]->(:作品{name:'倚天屠龙记'}) return p

就像 SQL 一样, Neo4j 中提供 WHERE 子句来过滤 MATCH 的查询结果

// 查询郭靖在哪些作品中出现
MATCH (n:作品)-[]-(m:角色) where m.name='郭靖' return n.name

同时 WHERE 可以结合函数 exists() ,字符串匹配 starts withends withcontains,逻辑匹配 innotandor 和正则表达式匹配进行更加精细的匹配

// 属性存在性检查函数exists(),匹配所有拥有 desc 属性的节点
match (n) where exists(n.desc)  return n// 匹配所有name起始为郭的节点
match (n) where n.name starts with "郭" return n// 匹配所有与杨过和小龙女有关的节点,同时过滤掉杨康和张三丰
match p=(n)--(m) where  n.name in ['杨过','小龙女'] and not m.name in ['杨康','张三丰'] return p
// 在这里要注意到 not 是对整个结果取反,而不能写成 name not in

正则表达式的语法

// 匹配所有 name 包含 龙 的节点,这个正则表达式等价为 match(n) where n.name contains '龙' return n
match (n) where n.name =~ '.+?龙.+' return n

LIMIT 子句用于限制返回匹配结果的数量

// 查询射雕英雄传作品中三个角色名
MATCH (n:作品)-[]-(m:角色) where n.name='射雕英雄传' return m.name limit 3

在关系中,允许匹配特定路径长度的内容,如

  • (n)-[*2]->(m) 表示关系数量为 2 的 3 个节点的匹配,等价于 (a)-[]->()-[]->(b)
  • (n)-[*2..4]->(m) 匹配路径长度为 2 到 4 之间的路径
  • (n)-[*2..]->(m) 匹配路径长度大于 2 的路径
  • (n)-[*..4]->(m) 匹配路径长度小于 4 的路径
  • (n)-[*]->(m) 匹配任意长度的路径
// 匹配 郭靖 到 黄蓉,路径长度为 1 到 3 的所有结果
MATCH p=(n)-[*1..3]->(m) where n.name='郭靖' and m.name='黄蓉' return p

3.2 创建语句

Neo4j中,CREATE命令用于创建节点和关系。

如创建一个金轮法王节点,即在label为角色的节点中创建一个name金轮法王的节点,同时为这个节点拥有来自蒙古的属性

// 创建角色节点,拥有属性name-金轮法王,from-蒙古
CREATE (n:角色 {name:'金轮法王',from:'蒙古'})

但在进行这个操作后,视图界面并不返回 Graph 界面,因为 CREATE 命令可以允许不跟 RETURN 同时使用,若使用了 RETURN,才会返回 Graph 界面。

Neo4j 只支持有向图,创建周伯通王重阳的关系如下:

CREATE (n:角色{name:'王重阳',nickname:'中神通'})- [:师弟] ->(m:角色{name:'周伯通',nickname:'老顽童'})

3.3 混合使用

知识图中可以存在两个内容完全相同的节点,因此,要给已经存在的两个节点创建关系,则不能简单地使用 CREATE 命令,而是要先用 MATCH 找到已存在的节点,再构建关系。

如要创建金轮法王杨过的关系,则先要找到金轮法王杨过这两个节点,再向这两个节点之间添加关系。

match (n:角色),(m:角色) where n.name='金轮法王' and m.name='杨过'  create (n)-[:对手]->(m)

3.4 MERGE命令

MERGE 命令是 CREATE 命令和 MATCH 命令的组合。 MERGE 在图中搜索给定模式,如果存在,则返回结果,如果不存在,则创建并返回结果

merge (n:门派{name:'少林'}) return n  // 用MERGE命令增加少林门派

3.5 SET语句

SET 用于给现有节点或关系添加新属性,因此,SET 需要配合 MATCH 使用。 如给杨过节点增加一个 “西狂” 属性

match (n:角色) where n.name='杨过' set n.nickname='西狂' return n

3.6 SHORTESTPATH 函数

shortestPath 函数用于查找两个节点之间的最短路径。 如查找张无忌降龙十八掌之间的关系

MATCH p=shortestPath((n:角色 {name:"张无忌"})-[*]-(m:武功 {name:"降龙十八掌"})
)
RETURN p

这个图说明,洪七公 曾经教授过 杨过杨过 又教授过 张三丰,最后 张三丰 教授过 张无忌,同时 洪七公 的武功有 降龙十八掌

3.7 删除语句

Neo4j 中有两种删除方法,DELETE 和 REMOVEDELETE 用于删除节点和关系,REMOVE 用于删除节点和关系的标签与属性。两者都需要配合 MATCH,先匹配到内容,再执行操作。

1. 删除属性
用REMOVE将金轮法王的from属性删除。
match (n:角色) where n.name='金轮法王' remove n.from return n2. 删除节点和边
若要删除节点,则需要删除与节点相关的所有边,这与图论一致——不存在没有节点的边。 因此要删掉金轮法王这个节点,就先需要找到该节点和所在关系,再进行删除
match (n:角色)-[r]-() where n.name='金轮法王' delete n,r3. 清空数据库
要清空数据库,意味着要清空所有的节点和边,节点存在两种情况:有边连接的和孤立的节点,因此需要同时匹配这两种情况,再进行删除
match (n) optional match (n)-[r]-() delete n,r

3.8 FOREACH 函数

foreach 是 Cypher 中列表的更新工具,在 foreach 中,支持 create,merge,delete 和 foreach 对图进行修改。

// 从字符串文本中创建角色节点
foreach(name in split('郭靖,杨过,张无忌',',') | create(n:角色{name:name}))

4. 小结

本文介绍了 Cypher 的基本语法,并利用 Cypher 对射雕三部曲的知识图谱进行了简单的增删查改操作。

Cypher 基本命令总结如下表

命令 用法
CREATE 创建节点,关系和属性
MATCH 检索有关节点,关系和属性
RETURN 返回查询结果
WHERE 提供条件过滤检索数据
DELETE 删除节点和关系
REMOVE 删除节点和关系的属性
SET 添加或更新标签

Cypher 更具体的用法,可以参考官方文档。官方文档http://neo4j.com/developer/cypher/

三、Cypher的使用(知识图谱构建射雕人物关系)相关推荐

  1. 一、概述(知识图谱构建射雕人物关系)

    如何快速梳理<射雕三部曲>中的人物关系,或者查看哪些人会什么武功?通常的思路是通过原著和网络上的解读分析,将人物,武功,门派等信息提取出来,并构建一个模型存储,提问时通过查询这个模型来获得 ...

  2. 四、py2neo 使用及构建图谱(知识图谱构建射雕人物关系)

    Neo4j 为多种语言提供了 API 接口,如 java,python,C#,RUBY,.NET等.本文首先介绍用 python 操作 Neo4j. 首先安装好py2neo库 sudo pip3 in ...

  3. 金庸小说人物知识图谱构建——获取共现关系

    在用命名实体识别工具提取出人名后,我们要构建一个知识图谱,还需要知道人物间的关系,而人物间的关系是基于人物共现来提取的,"共现"指的是两个人物在文章中某一部分共同出现,这个&quo ...

  4. 知识图谱构建:py2neo的实体关系以及节点显示图片

    简单示例 py2neo 节点可以显示图片.你可以将图片作为节点的属性存储在 Neo4j 数据库中,然后使用 py2neo 读取这些属性并在应用程序中显示.举个例子,你可以这样创建一个节点: from ...

  5. 【知识图谱】构建射雕三部曲人物关系

    KnowledgeGraph 前言引入 项目简介 基础知识 图论与知识图谱 知识图谱构建流程 命名实体识别 关系抽取 知识图谱存储 关键技术 学习内容 实验环境 后序引出 All Link 前言引入 ...

  6. 肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019

    演讲嘉宾 | 肖仰华(复旦大学教授.博士生导师,知识工场实验室负责人) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 近两年,知识图谱技术得到了各行各业的关注,无论是企业公 ...

  7. 虚拟专题:知识图谱 | 医学知识图谱构建关键技术及研究进展

    来源:<大数据> 医学知识图谱构建关键技术及研究进展 谭玲1, 鄂海红1, 匡泽民2, 宋美娜1, 刘毓1, 陈正宇1, 谢晓璇1, 李峻迪1, 范家伟1, 王晴川1, 康霄阳1 1 北京 ...

  8. 知识图谱构建实验笔记(二):知识图谱搭建过程与总结

    文章目录 引言 命名实体识别 1. 数据预处理 2. 构建模型并预测 3. 总结 关系抽取 1. 数据预处理 2. 模型构建并预测 3. 总结 数据入库 load csv方式 neo4j-admin ...

  9. 一站式了解多模态、金融、事理知识图谱构建指南 | AI ProCon 2020

    整理 | 许爱艳 出品 | AI科技大本营(ID:rgznai100) [导读]7 月 3-4 日,由 CSDN 主办的第三届 AI 开发者大会(AI ProCon 2020)在线上举行.本次大会有超 ...

最新文章

  1. java io nio aio_Java IO、NIO、AIO知识总结
  2. 怎样快速学会python_零基础怎样才能系统快速的学会Python?
  3. Pytorch基础(六)——激活函数
  4. swagger 修改dto注解_Swagger介绍及使用
  5. Python学习之旅:用Python制作一个打字训练小工具
  6. 2017年12月计算机一级c,2017年12月计算机二级《C语言》强化模拟题(1)
  7. 瞧瞧,这样的代码才叫 Pythonic
  8. web app页面要求
  9. android手机刷win10吗,无处不在!安卓手机能刷Win10系统了
  10. 曹如进:使用Faker.NET仿造数据
  11. 大数据系统架构的通用模块有哪些
  12. python 爬虫 爬取糗事百科段子
  13. PsPice教程学习笔记(Cadence Allegro)
  14. Qt 之 直播流播放Qt-Vlc
  15. 分享6款国内、国外开源PHP轻论坛CMS程序
  16. 有人在远程使用计算机是什么意思,如何远程控制计算机,计算机远程控制有什么用途...
  17. UE4如何实现裸眼3D效果 3D立体效果
  18. 批量提取word doc文档中的表格
  19. 创作者运营—创作者课程开发思路
  20. coj_1224: ACM小组的古怪象棋

热门文章

  1. -Dmaven.multiModuleProjectDirectory system propert
  2. php读取文件使用redis的pipeline导入大批量数据
  3. 锎的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  4. C# 保存窗口为图片(保存纵断面图)
  5. 嵌入式软件开发工程师求职要求
  6. Mybatis 分页操作
  7. 梦幻逊克,雾凇的故乡,摄影家的天堂
  8. ML - 贷款用户逾期情况分析5 - 特征工程2(特征选择)
  9. 网站已迁移、域名未转出,收到阿里云的“备案号可能被取消接入”邮件提示该怎么办。
  10. 使用GEE或PIE下载Landsat8影像