Mac-Neo4j安装与使用

关于图数据库的一些介绍

https://www.cnblogs.com/mantoudev/p/10414495.html

摘录一下:

图数据很多,图数据库比普通的要更快

neo4j的教程在:https://www.w3cschool.cn/neo4j/

Neo4j安装

https://neo4j.com/,点右上角的 DOWNLOAD NEO4J就行。之后填一个表(表单加载挺慢的,得等会),就能下载了。会给一个激活密钥。

我用的Mac,下载链接:https://neo4j.com/artifact.php?name=neo4j-desktop-offline-1.2.4.dmg

Activation Key:

1
eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyIgSG9sZGluZyBDby4sIEx0ZC4iOiIiLCJjYWxsYmFjayI6IiIsImVtYWlsIjoiaUBodWF3ZWkuY29tIiwiZm9ybWF0IjoianNvbiIsIm9yZyI6Ikh1YXdlaSBJbnZlc3RtZW50ICIsInB1YiI6Im5lbzRqLmNvbSIsInJlZyI6Ikh1YSBXZWkiLCJzdWIiOiJuZW80ai1kZXNrdG9wIiwiZXhwIjoxNjIwNTI4Nzg5LCJ2ZXIiOiIqIiwiaXNzIjoibmVvNGouY29tIiwibmJmIjoxNTg4OTkyNzg5LCJpYXQiOjE1ODg5OTI3ODksImp0aSI6InJHN2RxWmFJYiJ9.pN66t95DNK0rMfcu7D-XnET7gx6IrFgSZg1VmUBciXyTzgnpUzWtlW3MZCaerL0IWO5ZQfmEgX25pAU3Pmq6SlZvW462fZluxgEOw9wfrNhbjCVXSM70bv2tpKoIk9I8xySOaVMOsZ16SZRtlo0QAvaNizaZiMTSy-kdr2t2hzzV4bSgSJ--gBg-nwVBrcPJZfMcEii_zNrOvGkV3LcvRoU8aHRucCLosNxrhmc0Ug-SxnYGU7beJB6pgVAf57TSlU7Cv6rj0aDY_KcWCyCb4r-XvBu-ZVtzxDziYWjF-CWOBotnxEZWA89QM8J-c-DF82CPCUmuzWzj1t4KNDK-9g

直接把dmg文件打开,应用拖到Application里面就行了。之后打开就会自动安装配置,用上面的Activation Key就可以,或者新注册一下。

创建

主页选择创建数据库,之后选create local graph

创建好之后选择启动

之后可以点击manage,让它启动后按下open browser打开浏览器进行管理

浏览器中管理

在上面这个地方有写用户名是neo4j,网址和端口也有

使用

节点

CREATE (n:Student {name:'张三'}) RETURN n

CREATE (n:Teacher {name:'罗翔'}) RETURN n

创建两个节点

MATCH (n:Teacher {name:'罗翔'}) DELETE n

接下来再新增一个罗老师:CREATE (n:Teacher {name:'罗翔'}) RETURN n

添加边

MATCH (a: Teacher {name:'罗翔'}), (b: Student {name:'张三'}) MERGE (a)-[:审判]->(b)

查询

查询所有节点

MATCH (n) RETURN n LIMIT 25

查询结果

查询所有边的起始节点

MATCH (a)-->() RETURN a

忽略边的方向,查询所有关系的节点

MATCH (a)--() RETURN a LIMIT 25

边查询结果

MATCH (a)-[:审判]-() RETURN a LIMIT 25

MATCH (a)-[r]->(b) return a, b, r

注意:选择出来的结果不会做边的筛选

假如有两个关系,添加一个MATCH (a: Teacher {name:'罗翔'}), (b: Student {name:'张三'}) MERGE (a)-[:教导]->(b)

MATCH (a)-[r:审判]->(b) RETURN a, b, r

结果直接呈现两个关系

现在有俩关系了

删除边

MATCH ()-[r: 教导]->() DELETE r

属性

MATCH (a:Student {name:'张三'}) SET a.test='test'
MATCH (a:Student {name:'张三'}) REMOVE a.test

Python

这里使用和前面的语言一样的操作,不过为了区分这里用的是中文的label

pip install py2neo

安装好就可以连接了,注意协议不是http,是bolt

1
2
3
4
5
6
7
from py2neo import Graph,Node,Relationship

graph = Graph('bolt://localhost:7687',username='neo4j',password='123456')
a = Node('学生', name='张三')
b = Node('教师', name='罗翔')
graph.create(a)
graph.create(b)

这时我们在数据库里面可以看到:

用Python创建后

1
2
r = Relationship(b,'审判',a)
graph.create(r)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from py2neo import NodeMatcher
luo = NodeMatcher(graph).match('教师',name='罗翔') # 相当于graph.nodes.match('教师',name='罗翔')
print(len(luo))
# 不能用luo[0]
print(luo.first())
print(luo.first().__name__)
for i in luo:
print(i)
print(i['name'])
print(luo.graph.nodes)
for i in luo.graph.relationships:
print(i) # 这里会有bug,一些已经删除过的边会仍然留在里面,导致这里报错
graph.delete(luo.graph.relationships[0]) # 注意这里的0不是下标!是边的ID
# 搜索边
ans = graph.match(nodes=None, r_type='审判')
for i in ans:
print(i)
print(i.identity) # 这里是ID