Neo4J 简单教程 1、简介 知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用 可视化技术描述知识资源及其载体,挖掘、分析、 构建、绘制和显示知识及它们之间的相互联系。 知识图谱是通过将应用数学、 图形学、信息可视化技术、 信息科学等学科的理论与方法与计量学引文分析、共现分析等方法结合,并利用可视化的图谱形象地展示学科的核心结构、发展历史、 前沿领域以及整体知识架构达到多学科融合目的的现代理论。它能为学科研究提供切实的、有价值的参考。
知识图谱由于其数据包含实体、属性、关系等,常见的关系型数据库诸如MySQL之类不能很好的体现数据的这些特点,因此知识图谱数据的存储一般是采用图数据库(Graph Databases)。而Neo4j 是其中最为常见的图数据库。
Cypher是Neo4J的声明式图形查询语言,允许用户不必编写图形结构的遍历代码,就可以对图形数据进行高效的查询。Cypher的设计目的类似SQL,适合于开发者以及在数据库上做点对点模式(ad-hoc)查询的专业操作人员。其具备的能力包括: - 创建、更新、删除节点和关系 - 通过模式匹配来查询和修改节点和关系 - 管理索引和约束等。
2、安装 docker 安装
拉取镜像
docker pull neo4j # 默认安装最新版本
Copy
启动容器
1 2 3 4 5 6 7 8 9 docker run -d --name container_name \ //-d表示容器后台运行 --name指定容器名字 -p 7474:7474 -p 7687:7687 \ //映射容器的端口号到宿主机的端口号 -v /home/neo4j/data:/data \ //把容器内的数据目录挂载到宿主机的对应目录下 -v /home/neo4j/logs:/logs \ //挂载日志目录 -v /home/neo4j/conf:/var/lib/neo4j/conf //挂载配置目录 -v /home/neo4j/import:/var/lib/neo4j/import \ //挂载数据导入目录 --env NEO4J_AUTH=neo4j/password \ //设定数据库的名字的访问密码 neo4j //指定使用的镜像
Copy
检测是否启动成功
本地访问localhost:7474
,输入用户名及密码,能出现下边的页面即部署成功
image-20220516144523419
3、创建节点、关系、属性 通过实际案例讲解,节点包括电影和演员,电影和演员间存在主演关系等
1、清空数据库 删除数据库中全部的数据,保证一个空白的环境进行操作
1 MATCH (n) DETACH DELETE n;
Copy
2、创建节点
1 2 3 4 CREATE (n:Person {name:'葛优'}) RETURN n; CREATE (n:Person {name:'巩俐'}) RETURN n; CREATE (n:Person {name:'章子怡'}) RETURN n; CREATE (n:Person {name:'李连杰'}) RETURN n;
Copy
image-20220516145920097
1 2 3 4 CREATE (n:Movie {name:'活着'}) RETURN n; CREATE (n:Movie {name:'红高粱'}) RETURN n; CREATE (n:Movie {name:'卧虎藏龙'}) RETURN n; CREATE (n:Movie {name:'少林寺'}) RETURN n;
Copy
image-20220516145937971
3、创建关系
1 2 3 4 5 6 7 8 9 10 11 12 MATCH (a:Person {name:'葛优'}), (b:Movie {name:'活着'}) MERGE (a)-[:主演]->(b); MATCH (a:Person {name:'巩俐'}), (b:Movie {name:'红高粱'}) MERGE (a)-[:主演]->(b); MATCH (a:Person {name:'章子怡'}), (b:Movie {name:'卧虎藏龙'}) MERGE (a)-[:主演]->(b); MATCH (a:Person {name:'李连杰'}), (b:Movie {name:'少林寺'}) MERGE (a)-[:主演]->(b);
Copy
image-20220516150101614
1 2 3 4 5 6 7 8 9 10 11 12 MATCH (a:Person {name:'葛优'}), (b:Person {name:'巩俐'}) MERGE (a)-[:朋友]->(b); MATCH (a:Person {name:'巩俐'}), (b:Person {name:'章子怡'}) MERGE (a)-[:朋友]->(b); MATCH (a:Person {name:'章子怡'}), (b:Person {name:'李连杰'}) MERGE (a)-[:朋友]->(b); MATCH (a:Person {name:'李连杰'}), (b:Person {name:'葛优'}) MERGE (a)-[:朋友]->(b);
Copy
image-20220516150251832
1 CREATE (a:Person {name:'成龙'})-[r:FRIENDS]->(b:Person {name:'章子怡'})
Copy
1 2 3 MATCH (a:Person {name:'葛优'}), (b:Movie {name:'活着'}) MERGE (a)-[:主演 {since:1994}]->(b)
Copy
image-20220516150621217
4、查询数据 1、查询所有对外有关系的节点 1 MATCH (a)-->() RETURN a;
Copy
image-20220516150851145
2、查看所有有关系的节点 1 MATCH (a)--() RETURN a
Copy
image-20220516150946839
3、查看所有对外有关系的节点,以及关系类型 1 MATCH (a)-[r]->() RETURN a.name, type(r);
Copy
image-20220516151053686
4、查看所有有朋友关系的节点 1 MATCH (n)-[:朋友]-() RETURN n;
Copy
image-20220516152527772
5、查看某人的朋友的朋友 1 MATCH (a:Person {name:'葛优'})-[r1:朋友]-()-[r2:朋友]-(friend_of_a_friend) RETURN friend_of_a_friend.name AS fofName
Copy
葛优朋友的朋友就是章子怡
5、修改节点、属性 1 2 MATCH (a:Person {name:'葛优'}) SET a.age=54; MATCH (a:Person {name:'章子怡'}) SET a.age=44;
Copy
image-20220516153150421
6、删除节点、属性、关系 1、删除节点 删除节点前需要将节点的关系等数据删除,否则会报错(Cannot delete node<50>, because it still has relationships. To delete this node, you must first delete its relationships.)
1 MATCH (a:Person {name:'章子怡'}) DELETE a;
Copy
2、删除节点属性 1 2 MATCH (a:Person {name:'葛优'}) SET a.test='test'; MATCH (a:Person {name:'葛优'}) REMOVE a.test;
Copy
3、删除有关系的节点 1 MATCH (a:Person {name:'葛优'})-[rel]-(b:Person) DELETE a,b,rel;
Copy
4、删除关系
1 2 MATCH (:Person {name: "葛优"})-[r:朋友]-(:Person {name: "巩俐"}) DELETE r
Copy
1 2 3 4 5 MATCH (:Person)-[r:朋友]-(:Person) DELETE r MATCH ()-[r:朋友]-() DELETE r
Copy
7、批量导入节点、关系
image-20220516155842200
image-20220516155901861
image-20220516155921550
image-20220516155939143
1、导入演员节点 1 LOAD CSV WITH HEADERS FROM 'file:///a.csv' AS line FIELDTERMINATOR ',' CREATE (:Person {name: line.name});
Copy
2、导入电影节点 1 LOAD CSV WITH HEADERS FROM 'file:///b.csv' AS line FIELDTERMINATOR ',' CREATE (:Movie {name: line.name});
Copy
3、增加演员与电影的关系 1 LOAD CSV WITH HEADERS FROM "file:///c.csv" AS line MATCH (from:Person{name:line.person}),(to:Movie{name:line.movie}) MERGE (from)-[r:relation {Relation:line.relation}]->(to)
Copy
4、增加演员之间的关系 1 LOAD CSV WITH HEADERS FROM "file:///d.csv" AS line MATCH (from:Person{name:line.one}),(to:Person{name:line.two}) MERGE (from)-[r:relation {Relation:line.relation}]->(to)
Copy
A5CF8D71-A3EB-49D8-8D51-F67FD4146289