当前位置:网站首页>了解图数据库neo4j(一)
了解图数据库neo4j(一)
2022-06-09 08:52:00 【余生大大】
介绍
neo4j是一个图形数据库也可以叫做知识图谱,知识图谱的数据包含实体、属性、关系。知识图谱就是通过不同知识的关联性形成一个网状的知识结构。当前AI领域热门的计算机图像、语音识别甚至是NLP,其实都是AI的感知能力,真正AI的认知能力,就要靠知识图谱。
知识图谱目前的应用主要在搜索、智能问答、推荐系统等方面。
像我们在使用社交软件中经常会推荐你可能认识的人、共同关注的人、你的朋友也关注了他 等等的关系网推荐,这个在社交领域中叫做关注模型,我们下面尝试使用neo4j来实现它。
Neo4J简介
图形数据库也被称为图形数据库管理系统(GDBMS),现发展比较成熟的图数据库有Neo4j、OracleNoSQL、OrientDB、HypherGraphDB和GraphBase等
其中Neo4j是基于Java语言编写的图形数据库,它采用节点和关系的形式存储信息,并在此基础上提供界面友好的可视化演示,Neo4j图形数据库的主要组成有:
- 节点:即实体,用于表示一个单独存在的个体,节点一般包含多个属性
- 关系:也就是“边”,两个节点靠关系才能连接,每个关系也具有它自己的名词,可以通过Cypher检索关系名称来查找具有该关系的所有节点
- 属性:可以看作是节点的扩展描述,id、名称这些也属于节点的属性,详细的属性需要通过数据浏览器的Text标签进行查看
- 标签:即分组,Neo4j在建立节点或关系时要求事先分组
- 数据浏览器:Neo4j自己的可视化界面,用于提供用户执行Cypher查询命令并查看输出文本和图形
Neo4J安装
在我之前的文章中使用linux安装了neo4j,可以借鉴:Linux在线安装一个Neo4j图数据库
Neo4J基础操作
Neo4J安装后已经提供了可视化页面,并且可以直接执行语句来操作数据和查看数据库关系即标签,可谓非常好用。
安装好后访问neo4j的web页面:http://你的ip地址:7474/browser/

主页面是有执行命令的窗口,左侧导航栏有展示选择的数据库及数据库的节点总数和拥有的标签和关系,可以清晰看到我们这个数据库拥有哪些标签跟关系
Cypher查询语言
Cypher是Neo4J的声明式图形查询语言,允许用户不必编写图形结构的遍历代码,就可以对图形数据进行高效的查询。Cypher的设计目的类似SQL,适合于开发者以及在数据库上做点对点模式(ad-hoc)查询的专业操作人员。其具备的能力包括: - 创建、更新、删除节点和关系 - 通过模式匹配来查询和修改节点和关系 - 管理索引和约束等。
常用命令如下:
# 删除以往的所有节点和关系,MATCH是匹配操作,()表示一个节点,n是标识符
MATCH (n) DETACH DELETE n
# 创建一个标签为Person的节点,节点有一个name属性,属性值为'John'
CREATE (n:Person{
name:'John'}) RETURN n
# 从a到b建立起FRIENDS关系,关系有一个since属性,属性值为2001
MATCH (a:Person{
name:'Liz'}),(b:Person{
name:'Mike'})MERGE (a)-[:FRIENDS{
since:2001}]->b
# 查询在Boston出生的所有Person
MATCH (a:Person)-[:BORN_IN]->(b:location{
city:'Boston'}) RETURN a,b
# 查询所有具有对外关系的节点
MATCH (a)-->() RETURN a
# 查询所有具有关系的节点
MATH (a)--() RETURN a
# 查询所有具有对外关系的节点,并返回节点的name属性值和关系类型
MATCH (a)-[r]->() RETURN a.name, type(r)
# 给a节点设置一个age属性,属性值为34
MATCH (a:Person{
name:'Liz'}) SET a.age = 34
# 删除a节点的test属性
MATCH ... REMOVE a.test
# 删除a节点
MATCH ... DELETE a
# 只删除关系
match (n:Person{
name:"龙傲天"})<-[r:BIGBROTHER]-(m:Person{
name:"龙小弟"}) DELETE r
# 添加关系属性
MATCH p=({
name:'龙二弟'})-[r:BIGBROTHER ]->() SET r={
since:"2017-01-02"} RETURN p;
neo4j实战
我们接下来使用neo4j实现社交的关系模型
1. 清除数据库
将数据库初始化一下,保证我们的操作属性不受影响,在运行框内执行如下命令
MATCH (n) DETACH DELETE n
这条命令中MATCH为匹配,小括号()中写匹配的节点,n为标识符,DETACH DELETE为操作。
组合下来就是匹配标识符为n的进行删除

如上图执行成功清除命令
2. 创建人物
房间腾好了,那就该让我们的人物入住了,先创建我们的第一位嘉宾:龙傲天
CREATE (n:Person {
name:'龙傲天'}) RETURN n
CREATE是创建操作,Person是标签,代表节点的类型。花括号{}代表节点的属性,属性类似Python的字典。
这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是龙傲天。
创建好的效果如下:
看到我们傲天哥先来了,小弟都还不到,多不合适,赶紧创建天哥的小弟:
CREATE (n:Person {
name:'龙小弟'}) RETURN n;
CREATE (n:Person {
name:'龙二弟'}) RETURN n;
CREATE (n:Person {
name:'龙三弟'}) RETURN n;
CREATE (n:Person {
name:'龙四弟'}) RETURN n;
CREATE (n:Person {
name:'龙五弟'}) RETURN n;
创建成功后我们再来看一下:

小弟是有了,但是他们现在跟天哥没关系啊,这可不行,哪有小弟不认大哥的道理,那接下来就该让小弟跟大哥建立关系。
创建小弟跟大哥的关系:
MATCH (a:Person {
name:'龙小弟'}),
(b:Person {
name:'龙傲天'})
MERGE (a)-[:BIGBROTHER]->(b)
执行后我们来看看龙小弟拜见大哥了吗:

根据关系图看到龙小弟有一个大哥的关系指向了龙傲天,这样傲天哥就有了一个小弟,接下来将其他小弟也拜见龙傲天,命令如下
MATCH (a:Person {
name:'龙二弟'}), (b:Person {
name:'龙傲天'}) MERGE (a)-[:BIGBROTHER]->(b);
MATCH (a:Person {
name:'龙三弟'}), (b:Person {
name:'龙傲天'}) MERGE (a)-[:BIGBROTHER]->(b);
MATCH (a:Person {
name:'龙四弟'}), (b:Person {
name:'龙傲天'}) MERGE (a)-[:BIGBROTHER]->(b);
MATCH (a:Person {
name:'龙五弟'}), (b:Person {
name:'龙傲天'}) MERGE (a)-[:BIGBROTHER]->(b);
看看效果:

这样一看龙傲天有了点大哥的样子,众星捧月,但是我们想知道小弟们都是什么时候跟着龙傲天的,好方便以后排座位,这样就需要给关系加属性了,如下:
CREATE (n:Person {
name:'龙六弟'}) RETURN n;
MATCH (a:Person {
name:'龙六弟'}),
(b:Person {
name:'龙傲天'})
MERGE (a)-[:BIGBROTHER {
since:"2022-01-01"}]->(b)
这时候新来了个龙六弟,并且可以看到新来的龙六弟有了时间的属性,这样以后龙六弟就可以说我跟老大风里来雨里去的时候你们还玩泥巴呢。

这时候其他几个小弟不乐意了,我们最先跟的老大,怎么先有时间铭牌的是这个新来的,这样就需要解决之前兄弟没有身份的问题,但是之前跟的小弟怎么加属性的,总不能让龙六弟在它的五个哥哥之前吧,所以下面就是怎么修改关系的属性
MATCH p=({
name:'龙小弟'})-[r:BIGBROTHER ]->() SET r={
since:"2017-01-01"} RETURN p

龙小弟拿到时间铭牌非常高兴,并且时间也比龙六弟早,不屑的对龙六弟哼了一声,其他几个兄弟看到也赶紧要求加上,我们也给他们分发时间名牌
MATCH p=({
name:'龙二弟'})-[r:BIGBROTHER ]->() SET r={
since:"2017-01-02"} RETURN p;
MATCH p=({
name:'龙三弟'})-[r:BIGBROTHER ]->() SET r={
since:"2017-01-03"} RETURN p;
MATCH p=({
name:'龙四弟'})-[r:BIGBROTHER ]->() SET r={
since:"2017-01-04"} RETURN p;
MATCH p=({
name:'龙五弟'})-[r:BIGBROTHER ]->() SET r={
since:"2017-01-05"} RETURN p;
傲天哥的基础团队有了矛盾也消除了,该出去逛逛了,可该去哪呢?
目前我们的图谱中可只有人物的标签,傲天哥想逛逛街发展一下剧情都没法发展,那就应该创建地点的标签和属性建立跟我们傲天哥的关系,这些东西就放到下一章吧,傲天哥也得休息休息。
看到这里的同学如果想要实践一下却没有自己的neo4j可以使用我的,地址放在这里了:http://110.40.220.41:7474/browser/
边栏推荐
- 安科瑞配电室综合监控系统实现配电室内环境的在线监测,保障配电室设备的安全运行
- RMAN backup concept_ About RMAN incremental backup
- FreeRTOS semaphore review
- Simple use of vim
- 虚拟机安装及配置
- RMAN backup database_ Specify backup output options
- 防火门监控系统对防火门状态进行24小时实时自动巡检
- 清洗数据---2022/06/08
- 数据库问题MySQL
- Remote prepayment management system helps property management solve the problem of difficult charging and statistics
猜你喜欢

The fire door monitoring system carries out 24-hour real-time automatic inspection on the status of the fire door

. Net C # Foundation (6): namespace - a sharp tool for organizing code

How to solve the problem of mouseup event invalidation

MySQL基础 函数篇

虚拟机安装及配置

redhat7 破解(重置)root密码

Virtual machine installation and configuration

編輯器說明-備用

Implementation of WTM based on NETCORE framework

剖析虚幻渲染体系(15)- XR专题
随机推荐
The integrated monitoring system of ankerui distribution room realizes the online monitoring of the environment in the distribution room and ensures the safe operation of the equipment in the distribu
FreeRTOS semaphore review
Editor description - alternate
English grammar_ adverb
Is it safe for flush to open an account? Is it reliable?
附十七章 网络程序解读限定文章
3D編程模式:依賴隔離模式
RMAN backup database_ Specify backup output options
Mock interview plan; Campus simulated interview plan; Job search simulation interview contest plan; Planning book of simulated job hunting competition of School of economics and management; College st
腾讯云宝塔搭建网站注意事项
MySQL queries all database table names and their comments
Clickhouse data type sorting of system operation and maintenance series
剖析虚幻渲染体系(15)- XR专题
虚拟机安装及配置
Opencv获取图像像素值数据类型
Cleaning data ---2022/06/08
性能测试常见问题分析方法
How to use alicloud CDN to cache static websites deployed on function computing
配置Conda环境和Pytorch安装
redhat7 破解(重置)root密码