学习目标 🍀 了解neo4j图数据库的简介,版本说明。 🍀 了解节点,关系,属性,标签的有关概念。
学习目标 🍀 掌握neo4j图数据库的安装流程及其可视化后台的登陆
第一步:将neo4j安装信息载入到yum检索列表
rpm --import http://debian.neo4j.org/neotechnology.gpg.key
vim /etc/yum.repos.d/neo4j.repo
# 写入下面内容
[neo4j]
name=Neo4j RPM Repository
baseurl=http://yum.neo4j.org/stable
enabled=1
gpgcheck=1
第二步:使用yum install命令安装
yum install neo4j
第三步:修改配置文件默认在/etc/neo4j/neo4j.conf, 为了方便显示下面把一些修改显示在这里
# 数据库的存储库存储位置、日志位置等
dbms.directories.data=/var/lib/neo4j/data
dbms.directories.plugins=/var/lib/neo4j/plugins
dbms.directories.certificates=/var/lib/neo4j/certificates
dbms.directories.logs=/var/log/neo4j
dbms.directories.lib=/usr/share/neo4j/lib
dbms.directories.run=/var/run/neo4j
# 导入的位置
dbms.directories.import=/var/lib/neo4j/import
# 初始化内存大小
dbms.memory.heap.initial_size=512m # 将这一行注释去掉
# web页面地址
dbms.connectors.default_listen_address=0.0.0.0
# HTTP Connector. There can be zero or one HTTP connectors.
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474 # 将这一行注释去掉
# HTTPS Connector. There can be zero or one HTTPS connectors.
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473 # 将这一行注释去掉
# Bolt 连接地址
dbms.connector.bolt.enabled=true
# dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:7687 # 将这一行注释去掉
第四步:启动neo4j数据库
# 启动命令
neo4j start
# 终端显示如下,代表启动成功
Active database: graph.db
Directories in use:
home: /var/lib/neo4j
config: /etc/neo4j
logs: /var/log/neo4j
plugins: /var/lib/neo4j/plugins
import: /var/lib/neo4j/import
data: /var/lib/neo4j/data
certificates: /var/lib/neo4j/certificates
run: /var/run/neo4j
Starting Neo4j.
WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manual.
Started neo4j (pid 2463). It is available at http://localhost:7474/
There may be a short delay until the server is ready.
See /var/log/neo4j/neo4j.log for current status.
学习目标 🍀 了解Cypher的基本概念。 🍀 掌握Cypher的基本命令和语法。
创建图数据中的节点
# 创建命令格式:
# 此处create是关键字,创建节点名称node_name, 节点标签Node_Label, 放在小括号里面()
# 后面把所有属于节点标签的属性放在大括号'{}'里面,依次写出属性名称:属性值,不同属性用逗号','分隔
# 例如下面命令创建一个节点e, 节点标签是Employee, 拥有id, name, salary, deptnp四个属性:
CREATE (e:Employee{id:222, name:'Bob', salary:6000, deptnp:12})
匹配(查询)已有数据
# match命令专门用来匹配查询,节点名称:节点标签,依然放在小括号内,然后使用return语句返回查询结果,和SQL很相似。
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno
MATCH (n) return n # 查询所有结点
若节点存在,则等效与match命令; 节点不存在,则等效于create命令。
MERGE (e:Employee {id:146, name:'Lucer', salary:3500, deptno:16})
MERGE (e:Employee {id:146, name:'Lucer', salary:3500, deptno:16})
必须创建有方向性的关系,否则报错。
# 创建一个节点p1到p2的有方向关系,这个关系r的标签为Buy, 代表p1购买了p2, 方向为p1指向p2
CREATE (p1:Profile1)-[r:Buy]->(p2:Profile2)
可以创建有/无方向性的关系。
# 创建一个节点p1到p2的无方向关系,这个关系r的标签为miss, 代表p1-miss-p2, 方向为相互的
MERGE (p1:Profile1)-[r:miss]-(p2:Profile2)
类似于SQL中的添加查询条件。
# 查询节点Employee中,id值等于123的那个节点
MATCH (e:Employee) WHERE e.id=123 RETURN e
删除节点/关系及其关联的属性。
# 注意:删除节点的同时,也要删除关联的关系边
MATCH (p1:Profile1)-[r]-(p2:Profile2) DELETE p1, r, p2
Cypher命令中的排序使用的是order by.
# 匹配查询标签Employee, 将所有匹配结果按照id值升序排列后返回结果
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.id
# 如果要按照降序排序,只需要将ORDER BY e.salary改写为ORDER BY e.salary DESC
MATCH (e:Employee) RETURN e.id, e.name, e.salary, e.deptno ORDER BY e.salary DESC
1 toUpper()函数
将一个输入字符串转换为大写字母。
MATCH (e:Employee) RETURN e.id, toUpper(e.name), e.salary, e.deptno
2 toLower()函数
将一个输入字符串转换为小写字母。
MATCH (e:Employee) RETURN e.id, toLower(e.name), e.salary, e.deptno
3 substring()函数
返回一个子字符串。
# 输入字符串为input_str, 返回从索引start_index开始,到end_index-1结束的子字符串
substring(input_str, start_index, end_index)
# 示例代码,返回员工名字的前两个字母
MATCH (e:Employee) RETURN e.id, substring(e.name,0,2), e.salary, e.deptno
4 replace()函数
替换掉子字符串。
# 输入字符串为input_str, 将输入字符串中符合origin_str的部分,替换成new_str
replace(input_str, origin_str, new_str)
# 示例代码,将员工名字替换为添加后缀_HelloWorld
MATCH (e:Employee) RETURN e.id, replace(e.name,e.name,e.name + "_HelloWorld"), e.salary, e.deptno
# 还原
MATCH (e:Employee) RETURN e.id, replace(e.name, "_HelloWorld", ""), e.salary, e.deptno
1 count()函数
返回由match命令匹配成功的条数。
# 返回匹配标签Employee成功的记录个数
MATCH (e:Employee) RETURN count( * )
2 max()函数
返回由match命令匹配成功的记录中的最大值。
# 返回匹配标签Employee成功的记录中,最高的工资数字
MATCH (e:Employee) RETURN max(e.salary)
3 min()函数
返回由match命令匹配成功的记录中的最小值。
# 返回匹配标签Employee成功的记录中,最低的工资数字
MATCH (e:Employee) RETURN min(e.salary)
4 sum()函数
返回由match命令匹配成功的记录中某字段的全部加和值。
# 返回匹配标签Employee成功的记录中,所有员工工资的和
MATCH (e:Employee) RETURN sum(e.salary)
5 avg()函数
返回由match命令匹配成功的记录中某字段的平均值。
# 返回匹配标签Employee成功的记录中,所有员工工资的平均值
MATCH (e:Employee) RETURN avg(e.salary)
1 创建索引
使用create index on来创建索引。
# 创建节点Employee上面属性id的索引
CREATE INDEX ON:Employee(id)
使用drop index on来删除索引。
# 删除节点Employee上面属性id的索引
DROP INDEX ON:Employee(id)
2 删除索引
使用drop index on来删除索引。
# 删除节点Employee上面属性id的索引
DROP INDEX ON:Employee(id)
学习目标 🍀 了解python中neo4j-driver的相关知识。 🍀 掌握neo4j中事务概念和操作方法。
pip install neo4j-driver
from neo4j import GraphDatabase
# uri = "neo4j://192.168.88.161:7687" # 4.x版本用这个
uri = "bolt://192.168.88.161:7687" # 3.x版本用这个
driver = GraphDatabase.driver(uri, auth=("neo4j", "123456"), max_connection_lifetime=1000)
# 直接用python代码形式访问节点Company, 并返回所有节点信息
with driver.session() as session:
cypher = "CREATE(c:Company) SET c.name='我要回家' RETURN c.name"
record = session.run(cypher)
result = list(map(lambda x: x[0], record))
print("result:", result)
result: 我要回家
# 下面可以正常执行
def _some_operations(sess, cat_name, mouse_name):
sess.run("MERGE (a:Cat{name: $cat_name})"
"MERGE (b:Mouse{name: $mouse_name})"
"MERGE (a)-[r:And]-(b)",
cat_name=cat_name, mouse_name=mouse_name)
with driver.session() as session:
session.write_transaction(_some_operations, "Tom", "Jerry")
# 下面执行时报错
def _some_operations(sess, cat_name, mouse_name):
sess.run("MERGE (a:Cat{name: $cat_name})"
"MERGE (b:Mouse{name: $mouse_name})"
"CREATE (a)-[r:And]-(b)",
cat_name=cat_name, mouse_name=mouse_name)
with driver.session() as session:
session.write_transaction(_some_operations, "Tom1", "Jerry1")