Neo4j官方示例练习、学习

这篇博客主要介绍了Neo4j图数据库的基础知识,包括如何通过Docker部署,Cypher语言的使用,以及样本数据的测试。内容涵盖图数据库的基本概念如Nodes、Relationships和Labels,以及创建、查询、解决问题的示例。此外,还涉及到数据加载和删除的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

主要包括以下几个个方面的学习,基于 docker服务部署

Docker 部署如下命令

  1. 下载镜像:docker pull neo4j:3.5.0
  2. 运行容器:docker run -d -p 7474:7474 -p 7687:7687 --name neo4j-3.5.0 neo4j:3.5.0
  3. 停止容器:docker stop neo4j-3.5.0
  4. 启动容器:docker start neo4j-3.5.0
  5. 浏览器 http://192.168.1.74:7474/ 访问 neo4j 管理后台,初始账号/密码 neo4j/neo4j

两个基本问题

  • 怎么用?
  • 什么时候用?

一、基本介绍

Neo4j、TigerGraph、Amazon Neptune、JanusGraph、ArangoDB,是市场上最为知名的五大图数据库。

Neo4j是世界领先的图形数据库。 它的体系结构旨在优化管理,存储和遍历节点和关系。 该数据库采用一种属性图方法,这对于遍历性能和操作运行时都非常有利。 Neo4j提供专用的内存管理以及高效的内存操作。

它具有可伸缩性,可以部署为独立服务器,也可以在容错群集中的多台计算机上横向扩展以用于生产环境。 生产应用程序的其他功能包括热备份和广泛的监视。

目前只提供了 官方的驱动和 Java 客户端

服务端版本 包括社区版和商业版

二、Get start

几个概念
Nodes - graph data records
Relationships - connect nodes
Properties - named data values
Label - Nodes can be grouped together by applying a Label to each member

2.1、Cypher 基础

相当于sql 管理数据库

create

CREATE (ee:Person {
   
    name: "Emil", from: "Sweden", klout: 99 })

注释
CREATE clause to create data
() parenthesis to indicate a node
ee:Person a variable 'ee' and label 'Person' for the new node
{
   
   } brackets to add properties to the node

MATCH


MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;

注释
MATCH clause to specify a pattern of nodes and relationships
(ee:Person) a single node pattern with label 'Person' which will assign matches to the variable 'ee'
WHERE clause to constrain the results
ee.name = "Emil" compares name property to the value "Emil"
RETURN clause used to request particular results

关系

MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person {
   
    name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person {
   
    name: "Ian", from: "England", title: "author" }),
(rvb:Person {
   
    name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person {
   
    name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {
   
   since: 2001}]->(js),(ee)-[:KNOWS {
   
   rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)
MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee, friends

注释
MATCHclause to describe the pattern from known Nodes to found Nodes
(ee)starts the pattern with a Person (qualified by WHERE)
-[:KNOWS]-matches "KNOWS" relationships (in either direction)
(friends)will be bound to Emil's friends

在这里插入图片描述

explain/PROFILE 执行计划

PROFILE MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer

三、样本数据测试

3.1 、准备数据

CREATE (TheMatrix:Movie {
   
   title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {
   
   name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {
   
   name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {
   
   name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {
   
   name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {
   
   name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {
   
   name:'Lana Wachowski', born:1965})
CREATE (JoelS:Person {
   
   name:'Joel Silver', born:1952})
CREATE
  (Keanu)-[:ACTED_IN {
   
   roles:['Neo']}]->(TheMatrix),
  (Carrie)-[:ACTED_IN {
   
   roles:['Trinity']}]->(TheMatrix),
  (Laurence)-[:ACTED_IN {
   
   roles:['Morpheus']}]->(TheMatrix),
  (Hugo)-[:ACTED_IN {
   
   roles:['Agent Smith']}]->(TheMatrix),
  (LillyW)-[:DIRECTED]->(TheMatrix),
  (LanaW)-[:DIRECTED]->(TheMatrix),
  (JoelS)-[:PRODUCED]->(TheMatrix)

CREATE (Emil:Person {
   
   name:"Emil Eifrem", born:1978})
CREATE (Emil)-[:ACTED_IN {
   
   roles:["Emil"]}]->(TheMatrix)

CREATE (TheMatrixReloaded:Movie {
   
   title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})
CREATE
  (Keanu)-[:ACTED_IN {
   
   roles:['Neo']}]->(TheMatrixReloaded),
  (Carrie)-[:ACTED_IN {
   
   roles:['Trinity']}]->(TheMatrixReloaded),
  (Laurence)-[:ACTED_IN {
   
   roles:['Morpheus']}]->(TheMatrixReloaded),
  (Hugo)-[:ACTED_IN {
   
   roles:['Agent Smith']}]->(TheMatrixReloaded),
  (LillyW)-[:DIRECTED]->(TheMatrixReloaded),
  (LanaW)-[:DIRECTED]->(TheMatrixReloaded),
  (JoelS)-[:PRODUCED]->(TheMatrixReloaded)

CREATE (TheMatrixRevolutions:Movie {
   
   title:'The Matrix Revolutions', released:2003, tagline:'Everything that has a beginning has an end'})
CREATE
  (Keanu)-[:ACTED_IN {
   
   roles:['Neo']}]->(TheMatrixRevolutions),
  (Carrie)-[:ACTED_IN {
   
   roles:['Trinity']}]->(TheMatrixRevolutions),
  (Laurence)-[:ACTED_IN {
   
   roles:['Morpheus']}]->(TheMatrixRevolutions),
  (Hugo)-[:ACTED_IN {
   
   roles:['Agent Smith']}]->(TheMatrixRevolutions),
  (LillyW)-[:DIRECTED]->(TheMatrixRevolutions),
  (LanaW)-[:DIRECTED]->(TheMatrixRevolutions),
  (JoelS)-[:PRODUCED]->(TheMatrixRevolutions)

CREATE (TheDevilsAdvocate:Movie {
   
   title:"The Devil's Advocate", released:1997, tagline:'Evil has its winning ways'})
CREATE (Charlize:Person {
   
   name:'Charlize Theron', born:1975})
CREATE (Al:Person {
   
   name:'Al Pacino', born:1940})
CREATE (Taylor:Person {
   
   name:'Taylor Hackford', born:1944})
CREATE
  (Keanu)-[:ACTED_IN {
   
   roles:['Kevin Lomax']}]->(TheDevilsAdvocate),
  (Charlize)-[:ACTED_IN {
   
   roles:['Mary Ann Lomax']}]->(TheDevilsAdvocate),
  (Al)-[:ACTED_IN {
   
   roles:['John Milton']}]->(TheDevilsAdvocate),
  (Taylor)-[:DIRECTED]->(TheDevilsAdvocate)

CREATE (AFewGoodMen:Movie {
   
   title:"A Few Good Men", released:1992, tagline:"In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth."})
CREATE (TomC:Person {
   
   name:'Tom Cruise', born:1962})
CREATE (JackN:Person {
   
   name:'Jack Nicholson', born:1937})
CREATE (DemiM:Person {
   
   name:'Demi Moore', born:1962})
CREATE (KevinB:Person {
   
   name:'Kevin Bacon', born:1958})
CREATE (KieferS:Person {
   
   name:'Kiefer Sutherland', born:1966})
CREATE (NoahW:Person {
   
   name:'Noah Wyle', born:1971})
CREATE (CubaG:Person {
   
   name:'Cuba Gooding Jr.', born:1968})
CREATE (KevinP:Person {
   
   name:'Kevin Pollak', born:1957})
CREATE (JTW:Person {
   
   name:'J.T. Walsh', born:1943})
CREATE (JamesM:Person {
   
   name:'James Marshall', born:1967})
CREATE (ChristopherG:Person {
   
   name:'Christopher Guest', born:1948})
CREATE (RobR:Person {
   
   name:'Rob Reiner', born:1947})
CREATE (AaronS:Person {
   
   name:'Aaron Sorkin', born:1961})
CREATE
  (TomC)-[:ACTED_IN {
   
   roles:['Lt. Daniel Kaffee']}]->(AFewGoodMen),
  (JackN)-[:ACTED_IN {
   
   roles:['Col. Nathan R. Jessup']}]->(AFewGoodMen),
  (DemiM)-[:ACTED_IN {
   
   roles:['Lt. Cdr. JoAnne Galloway']}]->(AFewGoodMen),
  (KevinB)-[:ACTED_IN {
   
   roles:['Capt. Jack Ross']}]->(AFewGoodMen),
  (KieferS)-[:ACTED_IN {
   
   roles:['Lt. Jonathan Kendrick']}]->(AFewGoodMen),
  (NoahW)-[:ACTED_IN {
   
   roles:['Cpl. Jeffrey Barnes']}]->(AFewGoodMen),
  (CubaG)-[:ACTED_IN {
   
   roles:['Cpl. Carl Hammaker']}]->(AFewGoodMen),
  (KevinP)-[:ACTED_IN {
   
   roles:['Lt. Sam Weinberg']}]->(AFewGoodMen),
  (JTW)-[:ACTED_IN {
   
   roles:['Lt. Col. Matthew Andrew Markinson']}]->(AFewGoodMen),
  (JamesM)-[:ACTED_IN {
   
   roles:['Pfc. Louden Downey']}]->(AFewGoodMen),
  (ChristopherG)-[:ACTED_IN {
   
   roles:['Dr. Stone']}]->(AFewGoodMen),
  (AaronS)-[:ACTED_IN {
   
   roles:['Man in Bar']}]->(AFewGoodMen),
  (RobR)-[:DIRECTED]->(AFewGoodMen),
  (AaronS)-[:WROTE]->(AFewGoodMen)

CREATE (TopGun:Movie {
   
   title:"Top Gun", released:1986, tagline:'I feel the need, the need for speed.'})
CREATE (KellyM:Person {
   
   name:'Kelly McGillis', born:1957})
CREATE (ValK:Person {
   
   name:'Val Kilmer', born:1959})
CREATE (AnthonyE:Person {
   
   name:'Anthony Edwards', born:1962})
CREATE (TomS:Person {
   
   name:'Tom Skerritt', born:1933}
### 关于 Neo4j学习资料、教程、示例和报告 #### 一、Spring Data Neo4j 集成开发 Spring Data Neo4j 是一个强大的工具,用于简化在 Spring 应用程序中对 Neo4j 图数据库的数据访问操作。通过该框架,开发者能够以 JPA 风格的方式定义实体类及其关系,并将其映射到 Neo4j 中的节点和边[^1]。这种集成方式使得开发者无需手动编写复杂的 Cypher 查询语句即可完成大部分 CRUD 操作。 对于初学者而言,在构建项目时建议选择较低版本的 Spring Boot(如 2.3.5),以便与现有文档保持一致[^2]。随着技术的发展,未来可能需要适应更高版本中的变化。 #### 二、Neo4j 安装配置指南 为了顺利开展实践练习,首先需正确安装并运行本地实例。以下是具体步骤概述: 1. **下载软件包** 访问官方站点获取对应平台的支持文件;注意 JDK 版本兼容性问题——当选用 v4.x 及以上系列时至少要求 Java SE Development Kit 11 或更高级别[^3]。 2. **初始化环境** 解压缩后进入 `bin` 文件夹路径下执行命令行脚本来部署后台进程以及激活前端界面入口点 (`http://localhost:7474`) 登录验证默认凭证组合为用户名:"neo4j", 初始密码同样设置成了 "neo4j". 不过首次连接成功以后强制更改初始口令安全策略生效. #### 三、Cypher 基础教学概览 作为专用领域特定语言(DSL),Cypher 提供了一种简洁优雅的方式来表达复杂模式匹配需求。下面给出几个基础例子帮助理解其工作原理: - 创建两个简单的人员对象并通过指定属性建立关联关系: ```cypher CREATE (alice:Person { name:'Alice', age:30 }) CREATE (bob:Person { name:'Bob', age:28 }) MATCH (a:Person),(b:Person) WHERE a.name='Alice' AND b.name='Bob' CREATE (a)-[r:FRIEND_OF]->(b); RETURN type(r), r; ``` 此片段展示了如何利用 MATCH 子句定位目标记录集,接着运用 CREATE 动作新增一条指向型态的关系链路[FRIEND_OF]. 另外还有更多进阶功能等待探索比如聚合函数计算统计指标或者全文检索支持等等[^4]. --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值