前提背景:
了解知识图谱,图数据库的概念,并知道neo4j是图数据库的一种 支持事务等CRUD操作;
Neo4j:
1.一个开源
2.无Schema
3.Cypher进行类似Sql操作
4.基于Java开发,运行于JVM之上
CQL:
代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言
常用的Neo4j CQL命令/条款如下(遵循SQL语法类似):
S.No. | CQL命令/条 | 用法 |
---|---|---|
1 | CREATE 创建 | 创建节点,关系和属性 |
2 | MATCH 匹配 | 检索有关节点,关系和属性数据 |
3 | RETURN 返回 | 返回查询结果 |
4 | WHERE 哪里 | 提供条件过滤检索数据 |
5 | DELETE 删除 | 删除节点和关系 |
6 | REMOVE 移除 | 删除节点和关系的属性 |
7 | ORDER BY 以…排序 | 排序检索数据 |
8 | SET 组 | 添加或更新标签 |
Neo4j CQL 函数:
以下是常用的Neo4j CQL函数:
S.No. | 定制列表功能 | 用法 |
---|---|---|
1。 | String 字符串 | 它们用于使用String字面量。 |
2。 | Aggregation 聚合 | 它们用于对CQL查询结果执行一些聚合操作。 |
3。 | Relationship 关系 | 他们用于获取关系的细节,如startnode,endnode等。 |
CQL数据类型:和JAVA基本一致
create match return 节点关系创建查询
一、节点
1.创建
CREATE (customer:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
CREATE (credicard:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})
解释:
- create 创建节点
- customer credicard 节点名(此处没有实际含义 可以return 查看)
- Customer CreditCard 标签名(多个节点可以有相同的标签 归为一组)
- { } 标签属性,类JSON格式
2.查询
1.match (n) where n.id='1001' return n
2.match (a:Customer) return a
3.match (a:Customer) return a.name,a.id
4.match (a{name:'Abc'}) return a
5.match (n) return n
解释:
- match 和 return必须配合使用;搜索属性key为id 且等于'1001'的所有节点
- ( )可以是任何名称的变量名;搜索所有Customer标签分组的节点
- 同上,返回节点的指定属性
- 同上,搜索所有属性中包含name:'Abc'的节点
- 返回所有节点标签的属性
二、关系
1.创建
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>) CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>) RETURN <relationship-label-name>
解释:
- 以上语法为创建关系标准格式 其中node-label-name relationship-label-name .......只要不重复即可 变量名 ,relationship-name为关系名 最好见名知意;
- 节点匹配后可以加where条件筛选 否则 匹配所有nodel-name的节点;
- relationship-label-name 后可以增加{} 添加带属性的关系
eg:再创建一个Customer 节点和一个 CreditCard节点
match (a:Customer),(b:CreditCard) where a.id='1002' create (a)-[n:DO_SHOPPING_WITH {channel:'支付宝'}]->(b) return n
match (a:Customer),(b:CreditCard) where a.id='1001' and b.id='5001' create (a)-[n:DO_SHOPPING_WITH]->(b) return n
关系创建完成如下图
2.查询
match (n)--(m:CreditCard) return n
1.查询跟CreditCard有关系的节点 (无向);
match (:Customer{name="xxx"})-->(c) return c
2. 查询Customer的有向关系节点 如上图返回的是CreditCard节点(有向)(注意其实变量名不用时可以省略哦)
match (:Employee{deptno:20})-[a]->(:Dept{deptno:20}) return a,type(a)
3.获取指定节点间(有向)关系属性 和关系名称;如上图;
match (:Customer{id:"1002"})-[r:DO_SHOPPING_WITH{channel:'支付宝'}]->(a) return r,type(r)
4.获取指定节点(有向)的指定关系的属性 和 类型(名称) 如上图;更直观的如下:就是下面这两个relationship
三、更新graph
1.创建一个完整的Path
create p =(wanger:Worker:People{name:'wanger'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(mazi:Worker:People{name:'mazi'}) return p
由于Path是由节点和关系构成的,当路径中的关系或节点不存在时,Neo4j会自动创建;如上例的wanger 和 mazi 节点(他们有两个标签组 分别是Worker和People);
neo节点是什么属性标签都没有的节点 接下来我们要盘他;
2.为节点增加属性(全局id函数 id(n) 可以定位到唯一一个节点 id是全局自动分配的 不是属性 全局唯一 后面说函数)
match (n) where id(n)=84 set n.name='yiche' return n
3. 为节点增加标签
match (n) where id(n)=84 set n:Company return n
4.为关系增加属性
match (n)<-[r]-(m) where id(n)=84 and m.name='mazi' set r.team='AI-智能产品小组'
四、跟实体相关的函数 (实体:关系和节点)
所有常用函数 参考:https://blog.csdn.net/qq_33594101/article/details/79467184
跟实体相关的函数,主要是获取节点或关系的ID,关系类型,标签和属性等函数。
1.id(节点名/关系名) ID函数 可以返回节点或者关系的ID
match (:People{name:'wanger'})-[r]->(yiche) return id(r);
2. type(关系名) type函数 可以返回关系的类型 如WORKS_AT..
match (:People{name:'wanger'})-[r]->(yiche) return type(r);
3.labels(节点) lables函数 查询节点标签
match (:People{name:'wanger'})-[r]->(yiche) return labels(yiche);
4.keys(节点/关系) keys函数 查看节点或关系的属性键
match (a:People{name:'wanger'}) return keys(a)
5.properties(关系名/及诶单名) properties 函数 查询节点或关系 属性键值
match (a:People{name:'wanger'}) return properties(a)
五、模式(Scheme)
其实就是对以上所有Cypher用法的总结 一个规范 如 ()标识及节点; [] 标识关系 (n:People{。。。}) (a)-[r]->(b) (a)-->(b) 类似表达式;如果搞清楚了以上所有用法 这些格式应该都能看懂;说个特殊的:
1.变长路径的模式
从一个节点,通过直接关系,连接到另外一个节点,这个过程叫遍历,经过的节点和关系的组合叫做路径(Path),路径是由节点和关系的有序组合。
- (a)-->(b):是步长为1的路径,节点a和b之间有关系直接关联;
- (a)-->()-->(b):是步长为2的路径,从节点a,经过两个关系和一个节点,到达节点b;
Cypher语言支持变长路径的模式,变长路径的表示方式是:[*N..M],N和M表示路径长度的最小值和最大值。
- (a)-[*2]->(b):表示路径长度为2,起始节点是a,终止节点是b;
- (a)-[*3..5]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;
- (a)-[*..5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;
- (a)-[*3..]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;
- (a)-[*]->(b):表示不限制路径长度,起始节点是a,终止节点是b;
2.路径可以指定一个变量 如上 创建一个完整path的案例 p=(a) -[]->(b)
参考:https://www.cnblogs.com/ljhdo/p/5516793.html