neo4j学习

一、 安装

首先安装 jdk并配置好环境变量。在下载neo4j 并配好环境变量。
参考网址 :https://blog.csdn.net/qq_38335648/article/details/115027676

1、官网下载合适版本,下载链接 4.0版本以上就需要jdk11支持了
2、解压安装包
3、bin目录下打开cmd
4、neo4j.bat install-service安装neo4j服务
5、neo4j.bat start启动
6、使用浏览器neo4j http://127.0.0.1:7474/
默认的账号是 neo4j 密码 neo4j 这里第一次登录的话会要求修改密码

二、Cypher图像查询语言

 Cypher 是一种声明式图查询语言,允许对图进行富有表现力和高效[的查询、更新和管理](https://link.zhihu.com/?target=https%3A//neo4j.com/docs/cypher-manual/current/introduction/quering-updating-administering/)。由于它与其他语言的相似性和直观性,它是迄今为止最容易学习的图形语言。

cypher是用来查询neo4j图数据中的数据

cypher语法:
在这里插入图片描述

从上图可知:
Sally喜欢图表技术,
Sally与John是朋友,
Sally在Neo4j公司工作

图数据库包括::节点(节点标签、节点属性)、关系(关系类型、关系属性)

1.节点表示

Cypher 中的节点,是使用括号将节点括起来,例如(node),括号看起来与可视化表示用于我们数据模型中节点的圆圈的相似之处。节点的任何信息都可以卸载括里面包括:节点变量、节点标签、节点属性

  • 节点变量 如果我们查询到一个节点,然后想在查询后返回节点,我们就需要定义一个变量,就如果我们在java调数据库查到数据需要对象接收一样,如果不定义就无法在后续使用数据
  • 节点标签 上述图中我们可以看到每个节点都有标签,如果我们想筛选指定标签的数据或给节点创建标签,我们可以指定节点标签,如图中的Person,Technology、 和Company
  • 节点属性 如图中的节点属性,如果我们想要按照属性筛选或给节点创建属性,可以指定属性

示例:

(p:Person {name: 'Sally'})
(:Person {name: 'Sally'})

p为变量,Person为标签,{name: ‘Sally’}为属性

2.关系表示

关系在 Cypher 中使用箭头–>或<–两个节点之间表示,语法看起来像在表示中连接我们的节点的箭头和线。无向关系表示为没有箭头,只有两个破折号–,虽然插入必须有方向,但是在查询的时候如果不知道方向也是可以不指定,这意味着可以在任一方向上遍历关系

有关关系的信息,我们可以使用 [] 中括号编写,有关关系的任何信息都可以写在中括号中,如下述示例

(p:Person)-[rel:LIKES {type:'Graphs'}]->(t:Technology) 
(p:Person)<-[rel:LIKES {type: 'Graphs'}]-(t:Technology) 
(p:Person)-[rel:LIKES {type: 'Graphs'}]-(t:Technology)

也可以将一个sql赋值一个变量,可以在语句其他地方使用

sql = (p:Person)-[rel:LIKES {type: 'Graphs'}]->(t:Technology)

3.Cypher语法实践

S.NoCypher关键字作用
1CREATE 创建创建节点,关系和属性
2MATCH 匹配检索有关节点,关系和属性数据
3RETURN 返回返回查询结果
4WHERE 条件提供条件过滤检索MATCH数据
5DELETE 删除删除节点和关系
6REMOVE 移除删除节点和关系的属性
7SET 设置添加或更新标签
8ORDER BY 排序对结果排序
9SKIP LIMIT 分页分页
10DISTINCT 排重排重

3.1 创建操作

创建结点

#创建单个节点
CREATE (n)
#创建多个节点
CREATE (n), (m)
#创建带有单个标签的节点
CREATE (n:Person)
#创建带有多个标签的节点 
CREATE (n:Person:Swedish)
#创建带有标签和属性的节点并返回
CREATE (n:Person {name: 'Andy', title: 'Developer'}) return n.name,n.title
#创建一个电影节点
CREATE (m:Movie {title:'测试电影'})

创建关系

#创建已知节点之间的关系,并设置属性
match (p:Person),(m:Movie)
where p.name = 'Andy' and p.title = 'Developer' and m.title = '测试电影'
create (p)-[r:ACTED_IN {year:1980}]->(m)
return p,r,m
#创建新的节点并创建关系
create (p:Person {name:"Jry"})-[r:WORK_FOR]->(m:michael{name:'Mich'})
return p,r,m

创建安装链路

#创建完整链路
create p = (Person {name:"Tom"})-[:WORK_FOR]->(michael{name:'Michael'})
return p

3.2 MERGE操作

MERGE操作会先进行查询,如果未查询到会进行新建操作

#新建一个张三节点
merge (p:Person {name:'张三'})
return p
#还是新建张三并进行属性匹配,由于属性不完全匹配还是新增操作,可以看到id不同
merge (p:Person {name:'张三',height:185})
return p
#匹配存在的节点
merge (p:Person {name:'张三',height:185})
return p
#以现有节点属性去匹配新增节点
MATCH (person:Person)MERGE (city:City {name: person.bornIn})
RETURN person.name, person.bornIn, city
#创建节点时设置额外属性
MERGE (keanu:Person {name: '李四'})
ON CREATE
  SET keanu.created = timestamp()
RETURN keanu.name, keanu.created
#找到节点时设置额外属性
MERGE (person:Person {name:'张三'})
ON MATCH
  SET person.found = true
RETURN person.name, person.found
#ON CREATE/ON MATCH可以一起使用
#关系不存在创建关系
MATCH
  (charlie:Person {name: '张三'}),
  (wallStreet:Movie {title: '测试电影'})
MERGE (charlie)-[r:ACTED_IN]->(wallStreet)
RETURN charlie.name, type(r), wallStreet.title

更多merge操作参考官方文档: https://link.zhihu.com/?target=https%3A//neo4j.com/docs/cypher-manual/current/clauses/merge/%23merge-merge-on-a-relationship-between-two-existing-nodes

3.3 SET操作

set操作可以用来做更新操作

新增属性

#设置属性
MATCH (n {name: '张三'})
SET n.surname = '胖墩'
RETURN n.name, n.surname
#使用case-when设置属性
MATCH (n {name: '张三'})
SET (CASE WHEN n.height = 185 THEN n END).worksIn = '工厂'
RETURN n.name, n.worksIn

更新属性

MATCH (n {name: '张三'})
SET n.height = toString(n.height)
RETURN n.name, n.height

删除属性

#删除单个属性
MATCH (n {name: '张三'})
SET n.height = null
RETURN n.name, n.height
#删除所有属性
MATCH (p {name: 'Jry'})
SET p = {}
RETURN p.name

3.4 DELETE操作

delete可以进行删除节点操作,前提是需要将节点上的关系清除

MATCH (n:Person {name: '李四'})
DELETE n
#当数据量不大,我们想清除所有数据
MATCH (n)
DETACH DELETE n
#删除节点及所有关系
MATCH (n {name: 'Andy'})
DETACH DELETE n
#只删除关系
MATCH (n {name: 'Tom'})-[r:KNOWS]->()
DELETE r

3.5 REMOVE操作

remove主要用来删除属性和标签
Neo4j 不允许存储null在属性中。相反,如果不存在值,则该属性不存在

#删除属性
MATCH (a {name: '张三'})
REMOVE a.height
RETURN a.name, a.height
#删除标签
MATCH (n {name: 'Tom'})
REMOVE n:Person
RETURN n.name, labels(n)
#删除多个标签
MATCH (n {name: 'Tom'})
REMOVE n:Person:Movie
RETURN n.name, labels(n)

此篇为学习笔记,neo4j入门教程参考学习链接
【知识图谱】Neo4j入门教程 - 知乎 (zhihu.com)

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值