Cypher语言介绍

Cypher是一种声明式图数据库查询语言,它具有丰富的表现力,能高效地查询和更新图数据。Cypher借鉴了SQL语言的结构——查询可由各种各样的语句组合。
在Cypher语言中一个在图G上的查询Q可以认为是从空表到结果关系表的转换。一个Cypher 查询语言包括四部分:表达式、图模式、子句和查询。针对一个属性图而言,Cypher 语句既包括查询也包括数据更新和操作等功能。

创建一个节点

CREATE (n:SIGN {PROPERTY}) RETURN n
CREATE (n:Person {name:'John'}) RETURN n  //示例1
CREATE (n:Location {city:'Miami', state:'FL'})  //示例2
  • CREATE 是创建操作,SIGN是标签,代表节点得类型。花括号中代表节点的属性。
  • 示例1语句表示的是创建一个标签为Person的节点,其中节点具有一个name属性,属性值为John。
  • 花括号中可以创建多个属性,示例2语句表示的是创建一个标签为Location的节点,其中节点具有2个属性,第一个为city属性,属性值为Miami;第二个为state属性,属性值为FL
MATCH (a:SIGN {PROPERTY}),
      (b:SIGN {PROPERTY})
MERGE (a)-[:RELATION]->(b)
MATCH (a:Person {name:'Liz'}), 
      (b:Person {name:'Mike'}) 
MERGE (a)-[:FRIENDS]->(b)
  • MATCH语句是查询操作,用来匹配一定模式,可以是简单的节点、关联,也可以是复杂的路径。
  • MERGE语句是创建关系的操作,建立一条由a到b的边,边的关系类型是RELATION
  • 示例语句表示的是找到两个标签为Person,name属性分别为Liz和Mike的节点,分别记为a和b;然后创建一条由a到b的边,边的关系类型为FRIENDS
  • 边也可以添加属性,例如:
MATCH (a:Person {name:'Shawn'}), 
      (b:Person {name:'Sally'}) 
MERGE (a)-[:FRIENDS {since:2001}]->(b)

这里给FRIENDS添加了since属性,属性值为2001

  • 此外,不同节点类型的节点也可以创建关系,例如:
MATCH (a:Person {name:'John'}), 
      (b:Location {city:'Boston'}) 
MERGE (a)-[:BORN_IN {year:1978}]->(b)

1、查询所有对外有关系的节点

MATCH (a)-->() RETURN a

2、查询所有有关系的节点

MATCH (a)--() RETURN a

3、查询所有对外有关系的节点,以及关系类型

MATCH (a)-[r]->() RETURN a.name, type(r)

4、查询所有具有某种关系的节点

MATCH (n)-[:RELATION]-() RETURN n
MATCH (n)-[:MARRIED]-() RETURN n  //示例

示例语句表示的是查询所有有结婚关系的节点

修改与删除

1、增加/修改节点的属性

MATCH (a:SIGN {PROPERTY_1}) SET a.PROPERTY_1=x
MATCH (a:SIGN {PROPERTY_1}) SET a.PROPERTY_2=x
MATCH (a:Person {name:'Liz'}) SET a.age=34  //示例
  • 在这里,SET表示修改操作,如果属性不存在,则新建该属性并赋值
  • 示例语句表示的是对标签类型为Person,name属性为Liz的节点新增属性age,属性值为34

2、删除节点的属性

MATCH (a:SIGN {PROPERTY}) REMOVE a.PROPERTY
MATCH (a:Person {name:'Mike'}) SET a.test='test'
MATCH (a:Person {name:'Mike'}) REMOVE a.test
  • 删除节点的属性操作主要通过REMOVE
  • 示例语句表示的是新建一个test属性并赋值test,随后删除该属性

3、删除节点

MATCH (a:SIGN {PROPERTY}) DELETE a
MATCH (a:Location {city:'Portland'}) DELETE a  //示例
  • 删除节点操作是DELETE
  • 示例语句表示的是删除标签类型为Location,city属性为Portland的节点

4、删除所有内容

MATCH (n) DETACH DELETE n

1、创建人物节点

CREATE (n:Person {name:'Mike', sex:'male'}) RETURN n
CREATE (n:Person {name:'Jenny', sex:'female'}) RETURN n
CREATE (n:Person {name:'White', sex:'male'}) RETURN n
CREATE (n:Person {name:'Jenson', sex:'male'}) RETURN n
CREATE (n:Person {name:'Mary', sex:'female'}) RETURN n
CREATE (n:Person {name:'John', sex:'male'}) RETURN n

2、创建地点节点

//工作地点
CREATE (n:Company {name:'Microsoft'}) RETURN n
CREATE (n:Company {name:'Ubisoft'}) RETURN n
CREATE (n:Company {name:'NVIDIA'}) RETURN n
CREATE (n:Company {name:'Huawei'}) RETURN n
CREATE (n:Company {name:'Xiaomi'}) RETURN n
//创建国家、省市
CREATE (n:Municipality {name:'Beijing'}) RETURN n
CREATE (n:Municipality {name:'Shanghai'}) RETURN n
CREATE (n:City {name:'Nanjing'}) RETURN n
CREATE (n:City {name:'Wenzhou'}) RETURN n
CREATE (n:City {name:'Jiaxing'}) RETURN n
CREATE (n:City {name:'Nantong'}) RETURN n
CREATE (n:Province {name:'Jiangsu'}) RETURN n
CREATE (n:Province {name:'Zhejiang'}) RETURN n
CREATE (n:Country {name:'China'}) RETURN n

3、创建关系

MATCH(a:Person {name:'John'}),
     (b:Person {name:'Mary'})
MERGE(a)-[:Spouse]->(b)
MATCH(a:Person {name:'Jenson'}),
     (b:Person {name:'Jenny'})
MERGE(a)-[:Spouse]->(b)
MATCH(a:Person {name:'Mike'}),
     (b:Person {name:'White'})
MERGE(a)-[:Brothers]->(b)
MATCH(a:Person {name:'Mike'}),
     (b:Company {name:'NVIDIA'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'White'}),
     (b:Company {name:'Huawei'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'Jenny'}),
     (b:Company {name:'Huawei'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'Jenson'}),
     (b:Company {name:'Microsoft'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'Mary'}),
     (b:Company {name:'Microsoft'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'John'}),
     (b:Company {name:'Xiaomi'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Company {name:'NVIDIA'}),
     (b:Municipality {name:'Shanghai'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Company {name:'Ubisoft'}),
     (b:Municipality {name:'Shanghai'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Company {name:'Microsoft'}),
     (b:Municipality {name:'Beijing'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Company {name:'Xiaomi'}),
     (b:Municipality {name:'Beijing'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Municipality {name:'Shanghai'}),
     (b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Municipality {name:'Beijing'}),
     (b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Province {name:'Jiangsu'}),
     (b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Province {name:'Zhejiang'}),
     (b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Hangzhou'}),
     (b:Province {name:'Zhejiang'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Wenzhou'}),
     (b:Province {name:'Zhejiang'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Jiaxing'}),
     (b:Province {name:'Zhejiang'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Nanjing'}),
     (b:Province {name:'Jiangsu'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Nantong'}),
     (b:Province {name:'Jiangsu'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Person {name:'Mary'}),
     (b:City {name:'Wenzhou'})
MERGE(a)-[:Born_in]->(b)
MATCH(a:Person {name:'Mike'}),
     (b:City {name:'Nantong'})
MERGE(a)-[:Born_in]->(b)
                                    Cypher 语法学习Cypher介绍启动 Neo4j基本类型数值,布尔,字符串节点和关系列表匹配语句根据标签匹配节点根据标签和属性匹配节点匹配任意关系可选匹配过滤匹配路径长度匹配CREATE 命令创建节点创建关系混合使用MERGE 命令SET 子句SHORTESTPATH 函数DELETE 删除和 REMOVE 删除删除属性删除节点和边清空数据库FOREACH 函数总结
Cypher介绍
Cypher 是图形数据库 Neo4j 的查询语言,就像 SQL 在关系型数据库中查询一样。
Cypher 受到不同方
                                    文章目录一、Cypher简介图数据库的一些基本概念二、增删改查1、增createmerge2、删deleteremove3、改set4、查match常见的复杂查询三、一些其他的查询条件order by 排序limit和skipunion和union allin语法四、索引,执行计划,唯一约束索引 index执行计划 explain唯一约束 constraint
一、Cypher简介
“Cypher”是一个描述性的类Sql的图操作语言。相当于关系数据库的Sql。其语法针对图的特点而设计,非常方便和灵活。
                                    要删除的结点如果和其他结点存在关系,需先删除结点间的关系。创建姓名为猪八戒,身高230的结点,并查看创建结果。为id为6的Person类结点添加好人类结点。为id为6的好人类结点设施颜值为100的属性。创建姓名为孙悟空,年龄16岁的结点。删除姓名为孙悟空,年龄16岁的结点。查找姓名是孙悟空的结点及其id。创建孙悟空三大白骨精关系结点。也可以同时删除关系和结点。查找姓名是孙悟空的结点。
                                    1. Cypher 简介
Cypher 是 Neo4j 提出的图查询语言,是一种声明式的图数据库查询语言,它拥有精简的语法和强大的表现力,能够精准且高效地对图数据进行查询和更新。它是一种受 SQL 启发的语言,用于使用 ASCII-Art 语法描述图中的可视模式。它允许声明想要从图数据库中选择、插入、更新或删除什么,而不需要精确地描述如何做到这一点。通过 Cypher,用户可以构建表达性强且高效的查询,处理所需的创建、读取、更新和删除功能。
1.1 Cypher 设计理念
Cypher 的设计理念是:无论是
                                    Cypher 是用于与 Neo4j 交互的语言。最初由 Neo4j 为 Neo4j 创建,它已作为 openCypher 开源,现在被其他图形数据库引擎使用,例如RedisGraph. 它也是() 协会的一部分,其目标是构建一种通用的图形数据库查询语言——就像 SQL 用于关系数据库一样。无论如何,了解如何查询图形数据库是一个很好的起点,因为它的视觉方面:节点和关系可以通过查看查询来快速识别。
                                    上一篇文章我们介绍的图数据库Neo4j,这篇文章我们来看一下它的查询语言——CypherCypher是一种声明式图查询语言,表达高效查询和更新图数据库。关注专栏《知识图谱系列》了解更多相关知识~
1.1常用的命令和函数
Cypher查询语言也叫做CQL,它常用的命令如下:
CQL常用的函数如下所示:
1.2数据类型
CQL的数据类型跟Java语言类似,它们用于定义节点或关系的属性。
二、常用的命令
2.1 CREATE命令
2.1.1创建没有属性的节点
语法...
                                    小型金融知识图谱构流程示范
1. 知识图谱存储方式
知识图谱存储方式主要包含资源描述框架(Resource Description Framework,RDF)和图数据库(Graph Database)。
1.1 资源描述框架特性
存储为三元组(Triple)
标准的推理引擎
W3C标准
易于发布数据
多数为学术界场景
1.2 图数据库特性
节点和关系均可以包含属性
没有标准的推理引擎
图的遍历效率高
多数为工业界场景
2. 图数据库neo4j
neo4j是一款NoSQL图数据库,具备高性能的读写可扩展性,基于高效的图形查询语言Cypher,更多介绍可访问,官网还提供了实现快速上手体验。
2.1 软件下载
下载链接:
2.2 启动登录
进入neo4j目录
cd neo4j/bin
./neo4j start
启动成功,终端会提示:
Starting Neo4j.Started n