了解图数据库neo4j(三)

374 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

目录

前言

之前的文章中地点跟人物标签已经有了,人物跟地点的关系也已经组织好了,但是像我们的人物在这个地点什么时间做了什么事情我们还是一片空白,所以我们需要建立事件关系,事件关系不只是单标签的关联了。

事件分级

一个事件的简单分布:

  • 第一级:事件关系(触发关系、被触发关系)
  • 第二级:标签(人物、地点)
  • 第三级:属性(时间、事件原因)

解析事件

定义好事件分级后建立事件项,先建立一个事件,比如龙傲天请叶良辰在石家庄的2022年6月6号喝咖啡,我们分解一下这个时间的属性跟关系。

事件属性:

  • 事件名称:龙傲天请叶良辰在石家庄的2022年6月6号喝咖啡
  • 事件动作:喝咖啡
  • 触发时间:2022-06-06
  • 事件触发标签:人物标签
  • 事件触发节点:龙傲天
  • 事件被触发标签:人物标签
  • 事件被触发节点:叶良辰

关系属性:

  • 时间:2022-06-06
  • 标签:触发关系-标签、被触发关系-标签
  • 角色:触发关系-节点、被触发关系-节点

创建事件

解析好后我们创建上面规划好属性跟关系的事件节点,先创建叶良辰的人物节点

CREATE (n:Person {name:'叶良辰'}) RETURN n

在这里插入图片描述

建立这个事件节点:

CREATE (n:Event {name:'龙傲天请叶良辰在石家庄的2022年6月6号喝咖啡',action:'喝咖啡',dateTime:'2022-06-06 15:00:00',triggerTag:'Person',triggerNode:'龙傲天',isTriggerTag:'Person',isTriggerNode:'叶良辰'}) RETURN n;

在这里插入图片描述

事件建立好后建立人物标签与事件的触发关系,关系属性为规划好的

  • 时间:2022-06-06
  • 标签:触发关系-标签、被触发关系-标签
  • 角色:触发关系-节点、被触发关系-节点
MATCH (a:Person {name:'龙傲天'}), 
      (b:Event {name:'龙傲天请叶良辰在石家庄的2022年6月6号喝咖啡'}) 
MERGE (a)-[:Trigger{dateTime:'2022-06-06 15:00:00',tag:'Person',node:'龙傲天'}]->(b)

关系产生后的效果

在这里插入图片描述

建立被触发关系

MATCH (a:Person {name:'叶良辰'}), 
      (b:Event {name:'龙傲天请叶良辰在石家庄的2022年6月6号喝咖啡'}) 
MERGE (b)-[:ISTrigger{dateTime:'2022-06-06 15:00:00',tag:'Person',node:'叶良辰'}]->(a)

看一下执行完成后的关联关系

在这里插入图片描述 查询一下事件对外的所以关系节点

MATCH (a:Event)-->(b) RETURN a,b

目前只有一个事件 在这里插入图片描述

如果想查询指定对外关系被触发关系的指令如下

MATCH (a)-[:ARRIVE]->(b) RETURN a,b

在这里插入图片描述 如果想要筛选指定的标签跟关系在a,b项后加需要筛选的标签即可,如下指令

MATCH (a:Person)-[:ARRIVE]->(b) RETURN a,b

指令内容为筛选标签为Preson的对外关系为ARRIVE的所有节点 在这里插入图片描述