首页 > 其他分享 >Neo4j基础学习

Neo4j基础学习

时间:2023-11-19 17:12:01浏览次数:32  
标签:CREATE 基础 学习 MERGE neo4j Neo4j 大王 节点

还是参考微信公众号的一篇文章
“关于图数据库(Neo4j)你应该知道的一切”

先简单介绍一下,Neo4j相关的服务

Neo4j 数据库,又名为Noe4j DBMS
同时还有Neo4j AuraDB,是一种完全托管的云服务。
比较重要的还有Cypher,是neo4j的查询语言

采用neo4j数据库主要可以提升在大图中深度和广度恒定时间遍历效率
同时可以动态的增加新的关系和属性

neo4j的安装教程网上很多,这里就不再过多介绍
这边主要讲解如何使用Cypher实现简单的知识图谱构建,更新,查询,删除等操作
还是以公众号上面的小例子开展。

组成要素

neo4j主要由节点、关系、属性三方面组成
节点可以有一个或者多个label(标签)
label一般看作是节点或关系的集合

节点和关系,都可以具有多个属性。
关系一般是有方向的

下面以一个具体的实例来探讨neo4j的应用。

1. 场景描述

例子

“金角大王和银角大王两个妖怪是兄弟俩,他们都想吃唐僧这个和尚的肉。”
以个例子开展。

节点提取

首先,我们可以确定例子中的实体

金角大王
银角大王
唐僧

一般情况下节点代表具体的实体,而“和尚”,“妖怪”等更多的代表实体的类型(作为标签或属性)

节点标签提取

一个节点可以具有一个或多个标签,利用标签对节点进行分类或分组
在本例子中:
金角大王和银角大王的标签为“妖怪”
而唐僧的标签为“和尚”

关系定义

关系允许我们链接两个节点,它有一个源节点、带箭头的方向以及一个目标节点,同时关系也有自己的名字(动作),以及他们自己的属性。

上面的关系为:
“金角大王和银角大王是兄弟”
“金角大王想吃唐僧”
“银角大王想吃唐僧”

属性定义

节点和关系都可以定义属性,为键值对的形式,十分灵活

接下来重点是如何通过neo4j实现增删查等操作

2.创建节点关系

这里采用的是MERGE方法

MERGE (j:Monster {name: '金角大王'})
    ON CREATE set j.age = 3100
MERGE (y:Monster {name: '银角大王'})
  ON CREATE set y.age = 2800
MERGE (t:Monk {title: '唐僧'})
  ON CREATE set t.height = 182
MERGE (j)-[rel1:IS_BROTHER]->(y)
  ON CREATE SET rel1.since = '-2023'
MERGE (j)-[rel2:WANT_EAT]->(t)
  ON CREATE SET rel2.desire = 4, rel2.possibility = 0
MERGE (y)-[rel3:WANT_EAT]->(t)
  ON CREATE SET rel3.desire = 3, rel3.possibility = 0

节点()表示,关系[]表示
注意这里的ON CREATE SET表示条件性创建,即为不存在则创建
{}内部表示属性
j:Monster就是节点:label的形式

可以用SET命令向节点或关系添加新的属性或label

3.查询

采用MATCH和RETURN共同实现

MATCH (n1)-[r]->[n2] RETURN n1,r,n2

查找所有的关系,结果如下
image

4.删除

这里需要注意的是,Neo4j中不允许出现损害的边,所以要求先删除边在删除节点
还是采用MATCH和DELETE,
删除妖怪想吃唐僧的边

MATCH  (n1:Monster)-[r:WANT_EAT]->()
DELETE r

删除 唐僧节点

MATCH (n:Monk{title:"唐僧"})
DELETE n

其他删除也是类似的

注意,neo4j也是支持中文的
一般来讲,title和name还是采用英文合适,便于neo4j识别节点名称

当然,知识图谱的表示非常灵活,上面的场景不一定非要用对应上述的知识图谱表示,
例如和尚和人,可以作为唐僧的属性,也可以作为唐僧邻接的节点

两种表达形式,
image

image

更复杂的技巧,比如超边、索引等先不在本文中提出了。
掌握上面的例子,就可以借助neo4j实现知识图谱最基础的操作了。

标签:CREATE,基础,学习,MERGE,neo4j,Neo4j,大王,节点
From: https://www.cnblogs.com/zjz2333/p/17842268.html

相关文章

  • 【Java基础】异或特点+交换变量数值+数组反转
    异或特点二进制位不同为true,相同为false一个数被另外一个数异或两次,该数不变交换变量数值利用上述异或第2个特点实现交换两个整数类型变量数值代码publicclassXor{publicstaticvoidmain(String[]args){inta=10,b=4;a=a^b;......
  • 物联网协议学习 - MQTT协议3.1.1
    MQTT是什么MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。轻巧、开放、简单、规范,易于实现。MQTT是一种消息传递协议,即它是为传输消息而设计的,并使用发布和订阅模型。该模型使得向0个、1个或多个客户端发送消息成为可能。一个有用的类比是电视或广播。电视播音员使用......
  • 第十一周学习笔记(学习笔记10)
    〇、思维导图一、知识总结解释块设备I/O的原理和I/O缓冲的优点介绍Unix的缓冲区管理算法利用信号量设计新的缓冲区管理算法,以提高I/O缓冲区的缓存效率和性能介绍简单的PV算法及其特点基本概念读写普通文件的算法依赖于两个关键操作,即get_block和put_block,这两个操作将磁......
  • 02深度学习笔记
    1.二元分类一些基本符号含义:输入一幅以特征向量x表示的图像,预测对应的输出的y(0or1)单个样本(x,y)n(x)特征向量,y训练结果m表示训练集样本总数,{(x(1),y(1)),(x(2),y(2))...,((x(m),y(m))}M=M(train)训练集m(test)测试集样本总数X矩阵n(x)*m维的矩阵(Python)X.sharp得到矩阵......
  • 2023-2024-1 学号20231315第八周学习总结
    学期:2023-2024-1学号:20231315《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1《计算机基础与程序设计》这个作业的目标学习计算机科学概论第8章和《C语言程序设计》第6......
  • java反序列化----CC5利用链学习笔记
    java反序列化----CC5利用链学习笔记目录java反序列化----CC5利用链学习笔记环境配置利用链TiedMapEntryBadAttributeValueExpException参考文章环境配置jdk8u(无java版本要求)pom.xml中写入<dependency><groupId>commons-collections</groupId>......
  • 【Java基础】数组的动态初始化
    数组动态初始化:手动指定数组长度,系统为数组自动分配默认初始化值格式:数据类型[]数组名=new数据类型[长度];默认值的分类:整数:0小数:0.0布尔:false字符:'\u0000'(Unicode字符,常见的体现是空白字符)引用数据类型(数组、类、接口):null......
  • 2023-2024-1 20231412 《计算机基础与程序设计》第8周学习总结
    2023-2024-120231321《计算机基础与程序设计》第7周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13004这个作业的目标《计......
  • 2023-2024-1 20231418 《计算机基础与程序设计》第八周周总结
    2023-2024-120231418《计算机基础与程序设计》第八周周总结 这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里[2022-2023-1计算机基础与程序设计第八周作业]https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03这个作业的目标学习C语言......
  • 2023-2024-1 20231324 《计算机基础与程序设计》第八周学习总结
    2023-2024-120231324《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第8周作业这个作业的目标自学计算机科学概论第9章,《C语言程序设计》第7章作业正......