【Neo4j知识图谱数据库】入门

news/2025/1/23 19:08:09/文章来源:https://www.cnblogs.com/o-O-oO/p/18688514

在当今大数据和人工智能的时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文将带大家从入门到精通,了解知识图谱及其存储工具Neo4j的方方面面,包括知识图谱的介绍、Neo4j的特点、安装步骤、具体的使用方法(创建、查询),以及Cypher查询语言的详细讲解。

一、知识图谱简介

知识图谱是一种特殊的数据库管理系统,以图的形式存储数据,其中包含节点(表示实体)和边(表示实体之间的关系)。知识图谱专注于关系的存储和查询,因此在处理关系密集型数据和复杂查询时非常高效。与传统的关系数据库不同,知识图谱提供了一种更自然的方式来表示和处理实体之间的关系,允许高效地执行复杂的图形遍历和查询。

二、Neo4j的特点

Neo4j是一款领先的图数据库软件,采用了属性图数据模型。
它具有以下显著特点:

高性能:具有嵌入式、高性能、轻量级等优势,能够处理大量复杂、互连接、低结构化的数据,并且在查询速度方面非常高效。

灵活的数据模型:节点和边都可以包含丰富的属性信息,能够灵活地描述实体和关系的特征。

Cypher查询语言:支持Cypher查询语言,这是一种专门针对图数据库设计的查询语言,能够直观地表达图查询和图操作。

事务特性:支持完整的ACID(原子性、一致性、隔离性和持久性)规则,保证数据的可靠性和一致性。

扩展性:提供了大规模可扩展性,可以在一台机器上处理数十亿节点、关系和属性的图,也可以扩展到多台机器并行运行。

三、Neo4j的安装

Neo4j的安装过程相对简单,以下是Windows系统下的安装步骤:

安装Java JRE:由于Neo4j是基于Java运行环境的图形数据库,因此必须向系统中安装JAVA SE(Standard Editon)的JRE。

下载Neo4j安装文件:从Neo4j官网下载最新版本的Neo4j社区版,解压到指定目录。

创建Neo4j环境变量:创建主目录环境变量NEO4J_HOME,并把主目录设置为变量值。

启动Neo4j程序:通过控制台启动Neo4j程序,或者使用Neo4j集成的浏览器管理图数据库。

四、Neo4j的使用

4.1 创建节点和关系

使用Cypher查询语言可以方便地创建节点和关系。
以下是带有解释性说明的Cypher语句:

创建节点:

CREATE (n:Person { name: 'Andres', title: 'Developer' }) RETURN n;

解释:这条语句创建了一个标签为Person的节点,并为其设置了name和title两个属性。RETURN n用于返回创建的节点。

创建关系:

MATCH (x:Person { name: 'Andres' }), (y:Person { name: 'Vic' })
CREATE (x)-[r:Friend]->(y) RETURN r;

解释:首先,通过MATCH语句找到两个节点,分别是名为Andres和Vic的Person节点。然后,使用CREATE语句在它们之间创建一条标签为Friend的关系,方向从x指向y。RETURN r用于返回创建的关系。

4.2 查询节点和关系

Cypher查询语言提供了丰富的查询功能,可以根据节点属性、关系类型等进行查询。

以下是带有解释性说明的Cypher语句:

根据节点属性查找对应节点:

MATCH (x:Person { name: 'Andres' }) RETURN x;

解释:这条语句通过MATCH语句找到标签为Person且name属性为Andres的节点,并返回该节点。

查询节点之间的关系:

MATCH (x)-[r:Friend]-(y) RETURN x, r, y;

解释:这条语句通过MATCH语句找到所有标签为Friend的关系,并返回关系的两端节点以及关系本身。

查询N层关系的节点:

MATCH q=(x)-[*5..8]-() RETURN q LIMIT 200;

解释:这条语句通过MATCH语句找到从节点x出发,经过5到8层关系可以到达的所有节点和关系,并将它们作为一个路径q返回。LIMIT 200用于限制返回的结果数量。

4.3 Cypher语法详解

Cypher查询语言包含多种命令和函数,用于创建、查询和修改图数据。
以下是一些常用的Cypher语法及其解释:

【CREATE】:用于创建节点和关系。

CREATE (n:Label {property1:value1, property2:value2})

解释:创建一个标签为Label的节点,并设置其属性。

【MATCH】:用于匹配节点和关系。

MATCH (n:Label) RETURN n

解释:找到所有标签为Label的节点,并返回它们。

【RETURN】:用于返回查询结果。

MATCH (n:Label) RETURN n.property

解释:找到所有标签为Label的节点,并返回它们的某个属性。

【SET】:用于修改节点和关系的属性。

MATCH (n:Label) SET n.property = newValue

解释:找到所有标签为Label的节点,并修改它们的某个属性。

【DELETE】:用于删除节点和关系。

MATCH (n:Label) DELETE n

解释:找到所有标签为Label的节点,并删除它们。

【MERGE】:用于合并节点和关系,如果已存在则不创建新的节点或关系。

MERGE (n:Label {property1:value1})

解释:如果标签为Label且属性为property1:value1的节点不存在,则创建它;如果存在,则不执行任何操作。

五、Neo4j进阶使用

5.1 创建带有方向性的关系

在Neo4j中,关系可以是有方向的,这意味着它们可以从一个节点指向另一个节点。这种方向性在表示诸如“A是B的朋友”或“B关注A”这样的关系时非常重要。

创建有向关系:

CREATE (a:Person {name: 'Alice'})-[r:KNOWS]->(b:Person {name: 'Bob'})
RETURN r;

解释:

CREATE 关键字用于创建新的节点和关系。

(a:Person {name: 'Alice'})(b:Person {name: 'Bob'}) 是创建的节点,分别带有 Person 标签和 name 属性。

-[r:KNOWS]-> 表示创建一个类型为 KNOWS 的关系,从节点 a 指向节点 b。关系 r 是一个变量,可以在 RETURN 子句中引用。

RETURN r; 返回创建的关系。

创建双向关系:

虽然Cypher不直接支持在一个语句中创建双向关系,但你可以通过两个单独的 CREATE 语句来实现这一点。

CREATE (a:Person {name: 'Alice'})-[r1:KNOWS]->(b:Person {name: 'Bob'}),(b)-[r2:KNOWS_BACK]->(a);
RETURN r1, r2;

注意:上面的例子中,KNOWS_BACK 是一种表示反向关系的标签,但在实际应用中,通常只需要一个方向的标签(如 KNOWS),并通过查询的方向性来表示关系的方向。

5.2 查询带有方向性的关系

查询带有方向性的关系时,你需要指定关系的方向。这可以通过在关系类型前加上 -><- 来实现。

【查询有向关系】:

MATCH (a:Person)-[r:KNOWS]->(b:Person)
RETURN a.name AS PersonA, b.name AS PersonB, r;

解释:

MATCH 关键字用于匹配模式。

(a:Person)-[r:KNOWS]->(b:Person) 匹配所有从 Person 类型的节点 a 通过 KNOWS 关系指向 Person 类型的节点 b 的模式。

RETURN a.name AS PersonA, b.name AS PersonB, r; 返回匹配到的节点 a 和 b 的 name 属性,以及关系 r。

【查询反向关系】:

MATCH (b:Person)<-[r:KNOWS]-(a:Person)
RETURN a.name AS PersonA, b.name AS PersonB, r;

解释:

这里的<-[r:KNOWS]-表示匹配所有从 Person 类型的节点 b 通过 KNOWS 关系被 Person 类型的节点 a 指向的模式,即反向关系。

5.3 高级查询技巧

【查询路径上的多个关系】:

MATCH (a:Person)-[:KNOWS*]->(b:Person)
WHERE a.name = 'Alice' AND b.name = 'Charlie'
RETURN a, b, LENGTH(a.-[:KNOWS*]->b) AS distance;

解释:

[:KNOWS*] 表示匹配任意长度的 KNOWS 关系链。

WHERE 子句用于过滤匹配到的模式。

LENGTH(a.-[:KNOWS*]->b) 计算从 a 到 b 的最短路径长度(即关系的数量)。

【查询特定长度的路径】:

MATCH p = (a:Person)-[:KNOWS*1..3]->(b:Person)
WHERE a.name = 'Alice'
RETURN p, LENGTH(p) AS length;

解释:

[:KNOWS*1..3] 表示匹配长度为1到3的 KNOWS 关系链。

p = ... 将整个路径作为一个变量 p 返回。

LENGTH(p) 计算路径的长度。

六、总结

Neo4j作为一款高性能的图数据库软件,以其灵活的数据模型、高效的查询性能、丰富的生态系统等特点,在处理复杂关系数据时展现出独特的优势。通过本文的介绍,相信读者已经对Neo4j有了全面的了解,并能够使用Cypher查询语言进行基本的创建和查询操作。未来,Neo4j将继续在社交网络分析、推荐系统、金融风险管理等领域发挥重要作用,为数据科学和人工智能的发展提供有力支持。

希望这篇Blog能够帮助大家更好地掌握Neo4j的使用,如果有任何疑问或建议,欢迎留言交流。

个人观点,仅供参考

原创 WedO实验君 人工智能微客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873809.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jumpserve Linux 单机部署

参考文档:https://docs.jumpserver.org/zh/v3/installation/setup_linux_standalone/offline_upgrade/1、环境要求 1.1、操作系统1.2、数据库2、离线安装从飞致云社区 下载最新的 linux/amd64 离线包, 并上传到部署服务器的 /opt 目录https://community.fit2cloud.com/#/produ…

【AI应用开发】 向量和向量数据

一、什么是向量 向量vector 通常出现在自然语言NLP领域,NLP中称为词嵌入word embedding,词嵌入的工作就是如何将人类语言中的词汇、短语或句子转化为计算机能够理解和操作的数学向量。具体的,词嵌入(Word Embedding),是一种将词汇表中的每个单词或短语映射到一个固定大小…

云--什么是rest

https://www.whatisrest.com/已停用已被其他组织或个人用于其他服务

FDUWC2025 游记

夏虫振翅向灼热光明cnblogs 链接 退役老人人生第一次在网上写游记 qwq Day 0 到达国际大都市上海。这是我第二次来上海玩了,但是感觉 fdu 那一片和我印象中的上海不一样。上一次来没有注意,这一次来发现上海的车道少且窄,容易堵车,而且绿牌车的占比看起来比广州都高。冬天的…

Markdown学习day01

Markdown语法学习 标题:用#加Enter键:# +标题,有几个#就是几级标题 #+空格+标题 ##+空格+标题 ###+空格+标题 ####+空格+标题 #####+空格+标题 字体 粗体,两边加**; 字体 斜体,两边加*; 字体 斜体加粗,两边加***; 字体 删除线,两边加~~; 字体 引用 使用>+空格引用…

WordPress Technical Stack

- [Wordpress - WordPress Tech Stack](https://stackshare.io/wordpress/wordpress)StackStack DecisionsApplication and Data (3)PHPNGINXEdgeCastUtilities (4)Google AnalyticsElasticsearchKISSmetricsUserTestingDevOps (1)GruntBusiness Tools (2)WordPressHelpshift

【互联网行业】2024中国网络安全产业势能榜优能企业「互联网行业」典型案例展示

互联网行业的快速发展使其成为了信息安全的重灾区。网站、应用、平台以及用户数据面临着越来越复杂的安全威胁。如何通过技术手段增强网络安全防护,保障用户信息的隐私安全,成为了互联网企业的重要任务。我们将展示互联网行业中一些典型的案例,分析其在网络安全方面的创新措…

【Milvus向量数据库】AI应用开发

一、Milvus介绍 上一小节中,全面介绍了向量和向量数据库,今天详细介绍下其中比较出名的开源数据库Milvus。希望对你有帮助Milvus 是一个开源的、高性能的向量数据库,专为海量向量数据的快速检索而设计。在人工智能、计算机视觉、推荐系统和其他需要处理大规模向量数据的领域…

PassGet:一款使用Go语言编写的用于后渗透测试阶段提取Windows平台下常见的应用程序

免责声明 仅限用于技术研究和获得正式授权的攻防项目,请使用者遵守《中华人民共和国网络安全法》,切勿用于任何非法活动,若将工具做其他用途,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律连带责任项目介绍 PassGet是一款使用Go语言编写的用于后渗透测试阶段…

spandsp_start_dtmf的bug及修复

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 之前的文章中介绍过DTMF从2833到inband的转换,其中inband到2833的转换使用了“spandsp_start_dtmf”,这个函数在转换的过程中有缺陷。 环境 CentOS 7.9 freeswitch 1.10.7 问题描述 在fs桥接的呼叫,经过“spandsp_star…

如何打造一个高并发系统?

今天和大家聊聊作为一个后端开发,在实际工作中,我们如何打造一个高并发的系统? 如下图所示,大概有六个层面,我们结合具体的场景直播间签到去一一细说。一、前端 1、打散请求:即把用户的接口分散一点去请求后端,尽量不要集中在某一时刻。 场景:比如直播间讲师发起了一个…

批量登录灯塔扫描的信息收集GUI工具-TDGO更新(v1.0.1)发布

GitHub: https://github.com/lxflxfcl/DTGO作者语:嘘,我正在狠狠鞭打你的灯塔 前言 上一篇文章发布的DTGO的初始版本 TDGO(灯塔狩猎者)—一款分布式灯塔信息收集工具 现在更新了一版,更新内容如下: 功能更新:主界面UI美化【由Super师傅完成】删除任务记录【删除记录时会同…