节点:表示一个实体记录,就像关系数据库当中一条记录,一个节点包含多个属性和标签
关系:关系用于将节点关联起来构成图,关系也称为图论的边
属性:节点和关系都可以有多个属性,属性是由键值对组成的,就像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:"魏璎珞"})
运行之后的结果如下所示:
按照上述的方式,依次建立以下的节点:
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:"明玉"})
结果如下所示:
这样的一个一个的点之间是没有关系的,要想让这些点之间有联系,需要对两两之间的关系进行建立
2、创建人物之间的关系
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 (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)
结果如下所示:
在工具的左侧部分会增加一些“关系”,具体如下图所示:
涉及到的Cyper查询语言如下所示:
若在有关系的节点上只删除节点则会报错,因此在删除节点的时候,将节点上的所有关系也进行删除
后续会继续更细有关于知识图谱的内容,有同道者,可以互相交流哦