Neo4J图数据库入门记录
CQL语法
1、create命令
创建一个没有属性的节点
create (<node-name>:<lable-name>)
创建具有属性的节点
create (<node-name>:<lable-name>{<property1-name>:<property1-value>,……})
1.无条件查询
match (node-name:lable-name) return node-name //注意需要与return搭配使用
2.有条件查询
match (node-name:lable-name)
where node-name.property='ceshi'
return node-name
3.查询所有节点
match (n) return n
4.查询所有节点的标签
match (n) return distinct labels(n)
3、return命令
return 需与match或create+match搭配使用
4、关系基础
Neo4j图数据库遵循属性图模型来存储和管理其数据
根据属性图模型,关系应该是定向的。否则,Neo4j将抛出一个错误的信息。
基于方向性,neo4j划为单向关系和双向关系
现有节点创建没有属性的关系
MATCH (<node1-label-name>:<nodel-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
现有节点创建有属性的关系
MATCH (cust:Customer),(cc:CreditCard)
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
新节点创建没有属性的关系
CREATE
(<node1-label-name>:<node1-name>)-
[<relationship-label-name>:<relationship-name>]->
(<node1-label-name>:<node1-name>)
RETURN <relationship-label-name>
新节点创建有属性的关系
CREATE
(<node1-label-name>:<node1-name>{<define-properties-list>})-
[<relationship-label-name>:<relationship-name>{<define-properties-list>}]
->(<node1-label-name>:<node1-name>{<define-properties-list>})
RETURN <relationship-label-name>
create创建标签
单个标签到节点
CREATE (<node-name>:<label-name>)
多个标签到节点
CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
单个标签到关系
CREATE (<node1-name>:<label1-name>)-
[<relationship-name>:<relationship-label-name>]
->(<node2-name>:<label2-name>)
where子句
布尔运算符
比较运算符
使用where子句创建关系
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<relationship-properties>}]->(<node2-label-name>)
Delete删除
-
删除节点
-
删除节点以及相关节点和关系
删除没有带关系的节点
MATCH (e: Employee) DELETE e
删除带关系的节点
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
remove删除
-
删除节点或关系的标签
-
删除节点或关系的属性
-
delete与remove不能单独使用要与match一起使用
删除节点的标签
方法1
match (m) <节点名称>
where m.name="电影或图片" <添加对应的条件筛选>
remove m:Movie <要删除的节点关联的标签名>
return m <返回节点数据>
方法2
match
(m:Movie) <多标签的其中一个>
remove m:Picture <删除Picture标签>
删除节点的属性
方法1
match
(a)
where a.name="电影和图片"
remove a.name
return a
方法2
match
(m:Movie)
remove m.name
return m
set子句
向现有节点添加属性
match (m:Picture) set m.name="只含图片" return m
向现有节点的关系添加添加属性
match (s1)-[f:FRIEND]->(s2)
where s1.name="张三" and s2.name="李四"
set f.relation="他们是朋友"
return s1,s2
或
MATCH (:Person {name: 'Alice'})-[f:FOLLOWS]->(:Person {name: 'Bob'})
SET f.status = 'active'
RETURN f
order by排序
默认升序,降序用desc
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name DESC
union合并
同sql一样union和union all
注意:因为两个查询有不同的节点名称为了避免错误需要用as给每个字段起一个统一的别名,或者用同一个节点名称(此处不会报错)
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
limit和skip
MATCH (emp:Employee)
RETURN emp
limit 2
MATCH (emp:Employee)
RETURN emp
SKIP 2
merge合并
merge=create+match
如果不存在图中,则它新建节点/关系并返回结果,反之则不新建
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})
null和in
null、in关键字符合sql用法
is null 或者 is not null
in搭配where 进行筛选
ID属性
在neo4j中id是节点或关系默认的内部属性。这意味着,当我们创建一个新的节点或关系的时候,Neo4j数据库服务器将为内部分配一个数字,它会自动递增。
caption标题
在Neo4j数据中,当我们在Neo4j DATA浏览器中执行MATCH + RETURN命令以查看UI视图中的数据时,通过使用它们的Id属性显示节点和/或关系结果。 它被称为“CAPTION”的id属性。
方向关系
在neo4j中,两个节点之前的关系是有方向性的。它是单向或者双向的。
由于Neo4j遵循属性图数据模型,它应该支持方向关系。如果创建一个没有方向的关系
CQL函数
字符串函数
1.upper 它用于将所有字母更改为大写字母。
MATCH (e:Employee)
RETURN e.id,UPPER(e.name),e.sal,e.deptno
2.lower 它用于将所有字母更改为小写字母。
MATCH (e:Employee)
RETURN e.id,LOWER(e.name),e.sal,e.deptno
3.subtring 一个是索引的开始,另一个是返回从StartInded到EndIndex的子字符串
MATCH (e:Employee)
RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno
4.replace 它用于替换一个字符串的子字符串。
MATCH (p:Person)
WHERE p.name CONTAINS 'John'
SET p.name = REPLACE(p.name, 'John', 'Jonathan')
RETURN p
聚合函数(AGGREGATION)
COUNT、MAX、MIN、SUM、AVG
关系函数
用以获取开始节点、结束节点等细节时知道关系的细节
startnode:用于知道关系的开始节点
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN STARTNODE(movie)
endnode:用于知道关系的结束节点
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ENDNODE(movie)
id:它用于知道关系的id
type:它用于知道字符串表示的一个关系的type
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ID(movie),TYPE(movie)
管理员
数据库备份和恢复
索引
创建索引语法
create index on:Customer (name)
删除索引语法
drop index on:Customer(name)
unique约束
创建唯一约束语法
create constraint on (cc:CreditCard)
Assert cc.number is unique
drop unique
drop constraint on (cc:CreditCard)
Assert cc.number is unique
Springboot集成neo4j实现知识图谱关系图
https://blog.csdn.net/qq_48329942/article/details/130079049
新数据源测试2 273615320605446144
JsonArray dataArray = JsonParser.parseString(panelData).getAsJsonArray();
create (:Person{name:'张三'})
match (n:Person) match (m:Person)
where n.name = '张三' and m.name = '杨旭'
create (n) -[r:`学生`] ->(m)
return r
match (n:Person), (m:Person)
where n.name = '张三' and (m.name = '张鑫')
create (n) -[r:`室友`] -> (m)
return r
MATCH (n:Person {name: '张三'})-[r:`学生`]->() delete r
-- 创建一个空关系
CREATE ()-[:RELATIONSHIP]->()
CREATE ()-[:manage_10001012{projectId:'10001012',name:'manage',cusType:'manage_10001012',remark:'只是备注'}]->()
CREATE ()-[:归属_10001012{projectId:'10001012',name:'归属',cusType:'归属_10001012',remark:'只是备注'}]->()
-- 查询关系
MATCH p=()-[r:RELATIONSHIP]->() RETURN p LIMIT 25
-- 删除关系
MATCH p=()-[r:属于]->() delete p
-- 查找属性
MATCH (n) WHERE EXISTS(n.age) RETURN DISTINCT "node" as entity, n.age AS age LIMIT 25 UNION ALL MATCH ()-[r]-() WHERE EXISTS(r.age) RETURN DISTINCT "relationship" AS entity, r.age AS age LIMIT 25
match (n:Person), (m:Person)