什么是知识图谱?
有人的地方就会有江湖
江湖不是打打杀杀
而是人情世故
人情世故就是各种关系嘛
人情世故通常都是文本数据
在海量数据中将各种各样的关系抽出来
那我,我们怎么存储这些关系
普通的数据库,当然不行了
因为不够直观嘛
所以我们就有了神器——neo4j
neo4j是一种图形化数据库,能让人很直观看出各实体之间的关系。
1、JDK环境配置
很多人电脑上本来就有jdk,但是很抱歉,neo4j很矫情,它对JDK版本有要求,所以最好卸载原有的JDk,安装最新版本的JDk。
JDK安装:https://www.oracle.com/java/technologies/javase-downloads.html
直接无脑下载后点下一步就ok了。
我的电脑,右键->属性->高级系统设置->环境变量
系统变量->新建
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_152(以安装路径为主)
系统变量->新建
变量名:CLASSPATH
变量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; (注意符号,建议直接复制粘贴)
系统变量->编辑
找到Path选项:
变量名:Path
变量值:点击新建,将 %JAVA_HOME%\bin 填进去(注意符号,建议直接复制粘贴)
变量值:点击新建,将 %JAVA_HOME%\jre\bin 填进去(注意符号,建议直接复制粘贴)
至此完成配置。
按Win+R组合键打开“运行”,输入cmd进入dos界面,输入java -version
若出现这个图就表明成功啦!
2、neo4j环境配置
Neo4j安装:https://neo4j.com/download-center/
官网下载,然后无脑下一步安装
我的电脑,右键->属性->高级系统设置->环境变量
系统变量->新建
变量名:NEO4J_HOME
变量值: C:\neo4j-community-4.1.3
系统变量->编辑
找到Path选项:
变量名:Path
变量值:点击新建,将 %NEO4J_HOME%\bin 填进去
至此完成配置。
按Win+R组合键打开“运行”,输入cmd进入dos界面,输入neo4j
若出现这个图就表明成功啦!
本人已与百度合作,若以上配置过程看不懂或者有问题,可尝试百度搜索“xxx安装配置教程”即可。
3.启动neo4j看看
按Win+R组合键打开“运行”,输入cmd进入dos界面,输入
neo4j.bat console
出现如下界面表示成功启动
图中红方框就就是访问地址
打开浏览器输入:http://localhost:7474/
第一次登录的用户名和密码都是neo4j,登录成功后可以修改密码。
请看上面这张图:点开1位置的小星星,然后点击下面的Movie Graph(这是neo4j自带的演示知识图谱),然后我们会看到3位置自动出现了一行指令,然后点击4位置的小三角板,我们会得到5位置的界面,然后我们可以点击6位置的翻页,下面的每一页都会介绍neo4j的Cypher Query Language语句。
将页面翻到第2页,点击1位置的任意地方,我们能看到2位置的方框内自动出现了一堆指令,然后点击3位置的小三角,我们可以得到下图:
来解释下这个图哈,这个图中有9个person标签,8个movie标签,8个acted_in关系和10个directed关系。比如Tom Hanks演了8个电影。
至此,演示例子都看完啦,我只演示了第2页的指令,其他页的指令会简单的把Cypher Query Language都做一遍介绍,可自行琢磨,想系统学习Cypher Query Language可以去w3cschool看neo4j教程。
3、Cypher Query Language简单操作
增:
增加一个节点
create(n:Person{name:'毛同学',age:5})
解释一下:n相当于一个别名,Person是我们定义的标签名字,大括号里面是属性,这里我们创建了名字name和年龄age两个属性,值分别为‘毛同学’和5。
图中点击毛同学这个圆圈,可以看到左下角显示这个实体的id号和属性以及属性值。
带有关系属性
create (p:Person{name:"毛同学",age:"5"})-[:是一个{负债:10000}]->(n:Person{name:"穷人",age:"5"})
解释一下:这个语句的前面和后面一部分其实就是创建实体的语句,主要是中间的,":"后面的代表这个关系的名称,大括号里面的表示这个关系的属性。
图中点击1位置的关系,我们可以看到2位置的关系属性。
这个图的意思就是说:毛同学是一个穷人!(负债10000)(这是个悲伤的故事)
删:
create (n:Person {name:'MWY',age:20})
match (n:Person{name:"MWY"}) delete n
解释一下:这两句话是先创建了一个结点又删除了一个结点。其中删除语句中的n代表一个别名,相当于一个返回值,意思是在Person标签中查找name为"MWY"的返回给n,后面"delete n"代表删除n(就是查到的结点)这个结点。(注意:要删除点,必须先删除关系,不然不能删除)
删除关系
match (p:Person{name:"毛同学",age:"5"})-[f:是一个]->(n:Person{name:"穷人",age:"5"}) delete f
解释一下:删除关系语句中的前面部分和后面部分应该都能懂了,中间这部分,是把f当成一个返回值,查找到"是一个"这个关系后返回给f,后面的"delete f"代表把这个关系删除了,当然也可以变成"delete p,f,n",这表示把两个结点和它们的关系都删掉了。
改:
加上标签:
match (t:Person) where id(t)=0 set t:好人 return t
解释一下:首先match是查找的意思,t接收找到的id为0的结点,set表示增加的意思,意思是把id为0的标签为person的结点增加一个"好人"标签。
图中点击1位置的关系,我们可以看到2位置的标签变成了两个。
这个图的意思就是说:毛同学是一个人!且是个好人!(挺不好意思的)
改:
加上属性
match (a:好人) where id(a)=0 set a.颜值=200 return a
解释一下:首先match是查找的意思,a接收找到的id为0的结点,set表示增加的意思,意思是把id为0的标签为"好人"的结点增加一个"颜值"属性,值为200。
这个图的意思就是说:同学是一个人!且是个好人!他的颜值为200(不接受反驳)
改:
修改属性
match (a:好人) where id(a)=0 set a.颜值=500 return a
解释一下:首先match是查找的意思,a接收找到的id为0的结点,set表示修改的意思,意思是把id为0的标签为"好人"的结点的"颜值"属性改为500。
这个图的意思就是说:毛同学是一个人!且是个好人!200都已经不能够表示他的颜值,500才能勉强表示(我有点飘)
如果你想清空数据库那么:
快速清空数据库:
MATCH (n)
DETACH DELETE n
解释一下:n,表示的是一个别名,后面一句表示清空n,也就是清空数据库。
这就是我们常说的“删库跑路”一句中的删库指令。(温馨提示:慎用)
若想交流,加qq:1518887260
整理于2020年10月28日