在neo4j中,有几个非常重要的模块,分别是节点关系属性标签。节点和关系都可以有属性和标签,我们也就是靠节点和关系来表示三元组。换句话说,节点和关系构成了图谱的基本框架,它们的属性和标签就是起到补充和说明的作用。本文中,笔者将以节点和关系为中心来介绍neo4j中的相关基础操作。

1.创建一个节点

创建一个无属性的节点

创建一个无属性的节点是构建图谱基础中的基础,所谓的无属性就是这个节点只有节点名称和节点标签,没有任何的属性。在$符之后输入以下指令:

create(全职高手:电视剧)

创建之后的效果如图所示,

neo4j 优化Neo4jSession neo4j 教程_neo4j入门教程


点击右侧的play,也就是长的像视频播放的那个按钮,然后可以看到运行结果。这样我们就创建了一个节点名称为全职高手,节点标签为电视剧的无属性节点。如果想看整张图表的节点关系等信息可以点击左侧最上方的Database information,效果如下:

neo4j 优化Neo4jSession neo4j 教程_KG_02


然后点击节点标签电视剧,我们可以看到该节点的相关属性。

neo4j 优化Neo4jSession neo4j 教程_属性值_03


neo4j 优化Neo4jSession neo4j 教程_neo4j入门教程_04


因为我们创建的节点没有属性,所以这里的table为空,之后创建了有属性的节点就可以在这里看到属性名称和属性值了。

创建一个有属性的节点

创建一个有属性的节点就是在原来创建无属性节点的基础上加上属性和属性值,添加的格式就比较像c++中的dict,但是要注意属性名称没有双引号。如下所示,节点名称为叶秋,节点标签为男一,共有三个属性,分别是账号,职业和战队,其属性值分别为一叶之秋,散人和兴欣。

create(叶秋:男一{账号:"一叶之秋",职业:"散人",战队:"兴欣"})

创建之后的效果如图所示,

neo4j 优化Neo4jSession neo4j 教程_属性值_05


neo4j 优化Neo4jSession neo4j 教程_neo4j入门教程_06

创建一个有多个标签的节点

一个节点很有可能属于多个类,就像在写博客的时候可以给它多个tag一样,创建一个多标签的节点,就在创建一个无属性节点的基础上,再加上几个标签,注意节点标签之间,节点名称和节点标签之间都要用冒号分隔。

create(陈果:女一:网咖老板:兴欣战队经理)

创建之后的效果如图所示,

neo4j 优化Neo4jSession neo4j 教程_neo4j_07


我们可以看到在左侧的Node Labels中一下子多了3个标签,点击多标签节点的其中一个标签会同时显示3个标签,如图所示,

neo4j 优化Neo4jSession neo4j 教程_neo4j_08

2.创建关系

为现有节点创建关系

我们可以给已经存在的节点创建关系,但是要先用match匹配到,然后再创建关系。前面说过关系也是有标签的,也是可以有属性的。先来看一下无属性关系,

match (叶秋:男一),(陈果:女一) 
create (叶秋)-[为其打工:谋生]->(陈果)

第一行的match先获取节点数据,然后第二行创建关系,用中括号,先是关系名称,然后是关系标签,这里的关系就是为其打工,标签就是谋生。在中括号的两边可以看成是箭头,有点像链表哈。然后是有属性关系,跟有属性节点类似,也是在标签之后加上像dict一样的属性列表,如下所示,

match (叶秋:男一),(陈果:女一) 
create (叶秋)-[为其打工:谋生{开始时间:"退出嘉世战队之后",工作:"网管"}]->(陈果)

这里为"为其打工"这个关系添加了2个属性,一个是开始时间,一个是工作,它们的属性值分别是退出嘉世战队之后,网管。创建之后就是下面这样,

neo4j 优化Neo4jSession neo4j 教程_neo4j入门教程_09


我们可以看到在左侧已经有了谋生这个关系,这了显示的是关系标签,点击关系标签可以看到这个关系的效果,

neo4j 优化Neo4jSession neo4j 教程_数据_10


在table中可以看到关系的属性还有相关节点的属性

neo4j 优化Neo4jSession neo4j 教程_neo4j入门教程_11

创建新结点并创建关系

如果关系涉及的节点不存在,那么我们可以在创建关系的同时创建新结点,而且可以一次性创建2个新结点。这里就比为现有节点创建关系简单一点,不需要获取节点数据,可以直接用create创建。

create (苏沐橙:女二)-[队友:嘉世战队]->(孙翔:嘉世队长)

这样一条语句可以创建2个节点,1个关系,如图所示,

neo4j 优化Neo4jSession neo4j 教程_数据_12


然后点击旁边的关系嘉世战队,可以看到

neo4j 优化Neo4jSession neo4j 教程_KG_13

3.检索属性

检索属性就是先用match获取节点或者是关系的数据,然后用return检索。

检索节点属性
match(叶秋:男一) 
return 叶秋.职业,叶秋.战队,叶秋.账号

检索后的效果如图,

neo4j 优化Neo4jSession neo4j 教程_neo4j入门教程_14


这样我们就可以看到所需要的节点属性,如果想要得到节点的所有属性,可以直接检索节点

match(叶秋:男一) 
return 叶秋

neo4j 优化Neo4jSession neo4j 教程_数据_15


这样直接检索节点就可以得到节点的所有属性了。

检索关系属性
match (叶秋:男一)-[为其打工:谋生]->(陈果:女一)
return 为其打工

检索后的效果,

neo4j 优化Neo4jSession neo4j 教程_数据_16


这样我们就可以得到关系的所有属性了。

4.删除

删除关系

删除跟检索一样,也是要先获取节点或者是关系的数据,只不过这里用的不是return,而是delete。如果按照检索的方法获取数据会比较麻烦,这里分享一个小技巧,我们先点击要删除的关系,然后点击下图所示的位置,

neo4j 优化Neo4jSession neo4j 教程_KG_17


这样在$符之后就会出现这个关系,然后自己稍微修改一下就可以了。

MATCH ()-[r:`谋生`]->()
delete r

删除关系之后的效果是这样的,

neo4j 优化Neo4jSession neo4j 教程_数据_18


我们可以看到左边已经没有了谋生这个关系。

删除节点

比如说我们想删除女二这个节点,先获取数据然后删除,像这样,

neo4j 优化Neo4jSession neo4j 教程_neo4j_19


但是会。。。

neo4j 优化Neo4jSession neo4j 教程_neo4j入门教程_20


报错。。。因为这个节点还和其他节点有关系,要想删除这个节点就要先删除这个节点和其余节点的关系。所以我们在删除嘉世战队这个关系之后才可以删除女二这个节点。

neo4j 优化Neo4jSession neo4j 教程_KG_21


我们可以看到左边已经没有了嘉世战队这个关系,也没有了女二这节点。这就是我为什么要先介绍删除关系,再介绍删除节点咯。

结语

本篇博客主要介绍了创建节点,创建关系,检索和删除几个基本操作。这个顺序是我在自己摸索学习之后觉得合适的顺序,这样能够比较快地上手使用吧(起码我这么觉得)。当然这些都是最基本的操作,我还要继续学习。To be continue…