最近新入坑梦幻模拟战手游,对于英雄的羁绊一直不是很清楚,也不知道怎么方便查找英雄的羁绊(后来发现哔哩哔哩有专门的wiki进行介绍)。想到之前使用过一个叫做全历史的软件,是不是可以自己画一个类似的那种人物羁绊关系图,后来网上搜索了一下有个知识图谱的东西,似乎就很相似。但是网上的资料似乎都或多或少有点问题,花了我一天半的时间我才学会如何使用neo4j,因此在这儿重新梳理一下如何从完全不了解的情况下,开始使用neo4j搭建一个简单的知识图谱。写的不好,欢迎指责!
官网下载 :
https://www.oracle.com/java/technologies/javase-downloads.html
选择JDK版本
博主最开始下载的是java-20的版本,但是后来启动neo4j网页的时候,cmd终端总会发出警告(与neo4j版本不匹配),说是让我更换jdk的版本,因此这里使用的是JDK-17。
下载安装
这玩意儿下载比较慢,博主试了好几次,反复点击链接新建下载,每次下载的速度都不一样,慢的半小时,快的两分钟。
设置系统变量
可以直接在搜索框搜索环境变量
点进系统属性-高级-环境变量
选择新建一个系统变量,变量名为JAVA_HOME,变量值为C:\Program Files\Java\jdk-17(就是刚刚那个JDK的安装路径)
如下所示:
设置环境变量
双击系统变量里面的path,创建环境变量路径:%JAVA_HOME%\bin,设置完连点三个确定就可以了。
检测JDK是否安装成功
使用win+R,打开cmd,输入java -version,若没有报错则JDK安装成功
进入到neo4j文件夹下的bin目录:D:\neo4j-community-5.6.0\bin,这儿有neo4j的启动文件neo4j.bat
使用鼠标右键点击空白处,选择在终端中打开,或者通过win+R,打开cmd,通过cd指令,进入到这个路径。然后输入
./neo4j.bat console
设置用户名与密码
初次打开网页使用用户名neo4j和密码neo4j即可登陆成功,然后他紧接着会要求你修改密码,这个密码很关键,后面使用python进行连接的时候需要用到,记得保存。
试用一下
打开后是这样的内容,下面两个小框可以直接叉掉,不用管
在第一行输入
match(n) detach delete n
大小写都可以,可以先删除之前残留的知识图谱,(建议每次打开都删除一下)
然后再在第一行输入指令
CREATE (n:Person {name:'老师'}) RETURN n;
CREATE (n:Person {name:'学生A'}) RETURN n;
CREATE (n:Person {name:'学生B'}) RETURN n;
match(n) return n
显示当前的知识图谱
然后输入指令(注意指令中的箭头),把这三者的关系加上
MATCH (a:Person {name:'老师'}), (b:Person {name:'学生A'}) MERGE (a)-[:师生]->(b);
MATCH (a:Person {name:'老师'}), (b:Person {name:'学生B'}) MERGE (a)-[:师生]->(b);
MATCH (a:Person {name:'学生A'}), (b:Person {name:'学生B'}) MERGE (a)-[:同学]->(b);
再输入指令
match(n) return n
显示一下知识图谱:
可以看见三者之间的关系已经创建好了,可能有同学会觉得这个单向箭头有点不对劲,但是实际上在neo4j里面,显示形式只有单向箭头,当然也可以通过再加一套箭头的方式来显得好看,比如输入指令(注意指令中的箭头):
MATCH (a:Person {name:'老师'}), (b:Person {name:'学生A'}) MERGE (a)<-[:师生]-(b);
MATCH (a:Person {name:'老师'}), (b:Person {name:'学生B'}) MERGE (a)<-[:师生]-(b);
MATCH (a:Person {name:'学生A'}), (b:Person {name:'学生B'}) MERGE (a)<-[:同学]-(b);
构建一套三者的关系
再使用match(n) return n进行显示便得到:
Tips:实际上不需要每次都输入match(n) return n,我们可以点击代码块右上角的▶按钮,进行重复运行这一代码块,这样子这一块就是每次更新知识图谱的内容
pip install py2neo
./neo4j.bat consle
from py2neo import Graph, Node, Relationship, NodeMatcher
graph = Graph('http://localhost:7474',auth=("neo4j", "88888"),name='neo4j')
# 可以一个一个创建
t = Node('Person',name='老师')
a = Node('Person',name='学生A')
b = Node('Person',name='学生B')
graph.create(Relationship(t, "师生", a))
graph.create(Relationship(t, "师生", b))
graph.create(Relationship(a, "同学", b))
match(n) return n