Neo4j的使用-1

节点:表示一个实体记录,就像关系数据库当中一条记录,一个节点包含多个属性和标签

关系:关系用于将节点关联起来构成图,关系也称为图论的边

属性:节点和关系都可以有多个属性,属性是由键值对组成的,就像JAVA中的哈希

标签:标签指示一组拥有相同属性的节点,但不强制要求相同,一个节点可以有多个标签

路径:图中任意两个节点都存在由关系组成的路径,路径有长短之分

 

Cypher查询语言

Cypher是一种声明式图数据库查询语言,类似关系数据库当中的SQL,Cypher设计借鉴了其他如SQL、python语言惯用做法,Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单功能强大

START:在图中的开始点,通过元素的ID或索引查找获得

MATCH:匹配图模式

WHERE:过滤条件

RETURN:定义返回的结果,返回所需要的

基本语法:

增(CREATE)

删(DELETE)

改(SET)

查(MATCH)

函数

With

Create:(网址:https://blog.csdn.net/ainuser/article/details/72268344)
创建单个节点(注意有个空格):create (n)
创建带标签的节点(ID:n,label:Person):create (n:Person)
创建带两个标签的节点:create (n:Person:Student)
创建带标签、属性的节点: create (n:Person {name:"weiw",age:23})
返回创建的节点:create (a {name:"Tom"}) return a
创建关系(两个节点之间的关系):
match (a:Person),(b:Person) where a.name="zhangs" and b.name="lisi"  create (a)-[r:RELTYPE]->(b) return r
创建关系的同时设置属性:
match (a:Person),(b:Person) where a.name="zhangs" and b.name="lisi" 
create (a)-[r:RELTYPE {name:a.name +"<->" + b.name}]->(b) return r
完整创建:三个节点两个关系
create p=(an {name:"an"})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(mach {name:"mach"}) return p;

例子:

最近《延禧攻略》比较火,以此为例,将剧中的部分任务进行简单的构建人物图谱

1、创建人物节点:

create(:yanxi_gonglve{name:"魏璎珞"})

Neo4j的使用-1

运行之后的结果如下所示:

Neo4j的使用-1

按照上述的方式,依次建立以下的节点:

create(:yanxi_gonglve{name:"乾隆"})

create(:yanxi_gonglve{name:"富察皇后"})

create(:yanxi_gonglve{name:"高贵妃"})

create(:yanxi_gonglve{name:"娴妃"}),(:yanxi_gonglve{name:"纯妃"})

create(:yanxi_gonglve{name:"傅恒"}),(:yanxi_gonglve{name:"海兰察"})

create(:yanxi_gonglve{name:"尔晴"}),(:yanxi_gonglve{name:"明玉"})

结果如下所示:

Neo4j的使用-1

这样的一个一个的点之间是没有关系的,要想让这些点之间有联系,需要对两两之间的关系进行建立

2、创建人物之间的关系

match(a:yanxi_gonglve{name:"魏璎珞"})match(b:yanxi_gonglve{name:"乾隆"})create(a)-[r:令妃]->(b)

运行的结果如下所示:

Neo4j的使用-1

按照上述的方式,人物之间所存在的关系进行建立:

match(a:yanxi_gonglve{name:"魏璎珞"})match(b:yanxi_gonglve{name:"富察皇后"})create(a)-[r:主仆]->(b)

match(a:yanxi_gonglve{name:"魏璎珞"})match(b:yanxi_gonglve{name:"尔晴"})create(a)-[r:生恨]->(b)

match(a:yanxi_gonglve{name:"娴妃"})match(b:yanxi_gonglve{name:"魏璎珞"})create(a)-[r:暗算]->(b)

match(a:yanxi_gonglve{name:"娴妃"})match(b:yanxi_gonglve{name:"乾隆"})create(a)-[r:娴妃]->(b)

match(a:yanxi_gonglve{name:"娴妃"})match(b:yanxi_gonglve{name:"纯妃"})create(a)-[r:利用]->(b)

match(a:yanxi_gonglve{name:"纯妃"})match(b:yanxi_gonglve{name:"魏璎珞"})create (a)-[r:生恨]->(b)

match(a:yanxi_gonglve{name:"纯妃"})match(b:yanxi_gonglve{name:"傅恒"})create (a)-[r:喜欢]->(b)

match(a:yanxi_gonglve{name:"海兰察"})match(b:yanxi_gonglve{name:"傅恒"})create (a)-[r:同侍卫]->(b)

match(a:yanxi_gonglve{name:"尔晴"})match(b:yanxi_gonglve{name:"傅恒"})create (a)-[r:嫁入]->(b)

match(a:yanxi_gonglve{name:"富察皇后"})match(b:yanxi_gonglve{name:"傅恒"})create (b)-[r:姐姐]->(a)

match(a:yanxi_gonglve{name:"富察皇后"})match(b:yanxi_gonglve{name:"明玉"})create (a)-[r:宫女]->(b)

match(a:yanxi_gonglve{name:"富察皇后"})match(b:yanxi_gonglve{name:"尔晴"})create (a)-[r:大宫女]->(b)

match(a:yanxi_gonglve{name:"傅恒"})match(b:yanxi_gonglve{name:"魏璎珞"})create (a)-[r:喜欢]->(b)

match(a:yanxi_gonglve{name:"高贵妃"})match(b:yanxi_gonglve{name:"富察皇后"})create (a)-[r:暗算]->(b)

match(a:yanxi_gonglve{name:"高贵妃"})match(b:yanxi_gonglve{name:"乾隆"})create (a)-[r:贵妃]->(b)

match(a:yanxi_gonglve{name:"乾隆"})match(b:yanxi_gonglve{name:"富察皇后"})create (a)-[r:皇后]->(b)

match(a:yanxi_gonglve{name:"乾隆"})match(b:yanxi_gonglve{name:"富察皇后"})create (a)-[r:皇后]->(b)

结果如下所示:

Neo4j的使用-1

在工具的左侧部分会增加一些“关系”,具体如下图所示:

Neo4j的使用-1

涉及到的Cyper查询语言如下所示:

Neo4j的使用-1

若在有关系的节点上只删除节点则会报错,因此在删除节点的时候,将节点上的所有关系也进行删除

 

后续会继续更细有关于知识图谱的内容,有同道者,可以互相交流哦