Neo4j详细介绍及使用教程

article/2025/9/15 17:58:17

文章目录

    • 一、Neo4j介绍
    • 1.Neo4j简介
    • 2.图数据库简介
    • 3.Neo4j的优缺点
    • 4.Neo4j的常见应用场景
    • 二、使用教程
    • 1.下载安装
    • 2.数据插入和查询
    • (1)基本概念
    • (2)基本语法
    • Ⅰ.CREATE操作——创建
    • Ⅱ.MERGE——创建或更新
    • Ⅲ.Match操作——查找指定的图数据
    • Ⅳ.DELETE操作——删除节点
    • 3.JAVA实战

一、Neo4j介绍

1.Neo4j简介

Neo4j是一个高性能的,NOSQL图形数据库。它是一个嵌入式的、高性能(基于磁盘的)、具备完全的事务特性的Java持久化引擎,该引擎具有成熟数据库的所有特性,它在图(网络)中而不是表中存储数据。

2.图数据库简介

(1)特点:它的数据模型主要是以节点和关系(边)来体现,也可处理键值对。它的优点是快速解决复杂的关系问题。

(2)特征:
①包含节点和边;
②节点上有属性(键值对);
③边有名字和方向,并总是有一个开始节点和一个结束节点;
④边也可以有属性。

如下图的反洗钱模型:
在这里插入图片描述

(3)图计算
基本的数据结构表达就是:
G=(V, E)
V=vertex(节点)
E=edge(边)

3.Neo4j的优缺点

(1)优点
①底层数据存储专门针对图形数据的特点进行了优化,在处理关系数据方面比其他数据库有更高的性能。
②专门为关系数据设计的查询语言更便于关系数据的操作。
③没有表结构的概念,它比SQL更灵活。
④自动为数据建立合适的索引(根据数据的标签),避免索引管理的麻烦。
⑤支持高可用主从集群部署。
⑥借助图形平台等辅助工具帮助开发人员快速构建完整的关系数据平台。
(2)neo4j的缺点
①图数据结构导致写入性能差。
②只支持java和基于jvm的语言,社区版不能使用集群。
③社区不够活跃,资料不丰富。
(3)为什么选用Neo4j
Neo4j发布时间早,产品较为成熟稳定,目前是市场使用率最高的图数据库,文档和各种技术博客较多

4.Neo4j的常见应用场景

(1)金融行业的反洗钱模型
(2)社交网络图谱
(3)企业关系图谱

二、使用教程

1.下载安装

(1)下载
需要jdk环境:Neo4j v4 需使用 jdk11以上版本;v5需要jdk17以上版本。我本地是jdk1.8版本,所以选择v3的版本。
v4、v5下载可以到官网:https://neo4j.com/download-center/,但是官网找不到v3版本。
这里放上v3.5.5版本的资源:链接:https://pan.baidu.com/s/1Wx4MwHRCRKUOXUcUvWctmA 提取码:0g30
(2)配置环境变量
新建用户变量NEO4J_HOME,值为D:\tools\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5
然后在系统变量Path中添加%NEO4J_HOME%\bin
(3)启动
在cmd中运行D:\tools\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\bin>neo4j console
然后进入http://localhost:7474/browser/就可以访问了
然后会提示你输入用户名密码 默认是neo4j/neo4j

2.数据插入和查询

(1)基本概念

Nodes:节点,用于图形数据记录
Relationships:关系,用于连接节点
Properties:属性,用于命名数据值

(2)基本语法

首先我们找到创建图的入口,然后再在最上方运行命令即可
在这里插入图片描述

Ⅰ.CREATE操作——创建

①添加节点:
CREATE (n:Person {name:‘小李’, born:1989}) RETURN n;
注:CREATE是创建操作,n代表该节点,相当于一个只在当前语句生效的局部变量,Person是标签,代表节点的类型。花括号{}代表节点的属性。RETURN 代表返回该数据,也可以不return直接插入

批量操作:
CREATE (a:Person {name:‘老张’, born:1990})
CREATE (b:Person {name:‘老王’, born:1995})
CREATE (c:Person {name:‘李华’, born:1993})
CREATE (d:Country {name:‘美国’, des:‘美利坚共和国’})
CREATE (n:Country {name:‘中国’, des:‘中华人民共和国’})

此时我们的图:

②创建关系:
CREATE (a:Person {name:‘小李’, born:1989})-[r:所属国家]->(b:Country {name:‘中国’, des:‘中华人民共和国’}) return a,r,b
在一个Person与Country之间建立一个“所属国家”关系,并且这个关系是有方向的

Ⅱ.MERGE——创建或更新

merge等于是create+match,如果节点中有重复数据,就不会添加进去
①创建节点:
MERGE (n:Person {name:‘小胡’, born:1990})
②创建关系:
MATCH (a:Person {name:‘李华’, born:1993}), (b:Country {name:‘美国’, des:‘美利坚共和国’})
MERGE (a)-[r:所属国家]->(b)
在这里插入图片描述

③更新操作:
MERGE (n:Person {name:‘老王’})
ON MATCH SET n.born = 2023
RETURN n

Ⅲ.Match操作——查找指定的图数据

①普通查询:
MATCH (n:Person {born:1990}) RETURN n
指查询一个标签(Label)为Person、born为1990的节点。
在这里插入图片描述
②查询所有对外有关系的节点(注意这里箭头的方向)
MATCH (a)–>() RETURN a
③查询所有有关系的节点
MATCH (a)–() RETURN a
④修改操作
MATCH (a:Person {name:‘老王’}) SET a.born=1988 RETURN a
⑤删除属性
MATCH (a:Country {name:‘美国’}) REMOVE a.des RETURN a

Ⅳ.DELETE操作——删除节点

①删除
MATCH (a:Person {name:‘李华’}) DETACH DELETE a
Delete操作会删除节点与关系。
②删除全部:
MATCH (n) DETACH DELETE n

3.JAVA实战

(1)首先引入maven包

  <dependency><groupId>org.neo4j</groupId><artifactId>neo4j</artifactId><!--<version>5.5.0</version>--><version>3.5.5</version></dependency>

(2)使用嵌入式的方式访问Neo4j(还有服务的方式,可以自行了解)

package com.example.user.dal;import org.neo4j.graphdb.*;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;import java.io.File;///neo4j使用--嵌入式
public class neo4jRepository {//创建节点的标签枚举public enum MyLabels implements Label {//城市CITY,//省会CAPITAL;}//创建关系的标签枚举public enum MyRelation implements RelationshipType {//所属BELONG}//全局只创建一个GraphDatabaseService实例GraphDatabaseService graphDb;//创建file 指明我们想要操作的neo4j数据库的数据文件的路径private static final File databaseDirectory = new File("D:\\tools\\neo4j\\neo4j-community-3.5.5-windows\\neo4j-community-3.5.5\\data\\databases\\graph.db");public static void main(String[] args) {neo4jRepository repository = new neo4jRepository();/*repository.createDb();repository.shutDown();*///repository.searchCapital("浙江");repository.searchProvince("郑州");}void createDb() {System.out.println( "打开数据库 ..." );//创建graphDb实例, 参数是我们想要操作的neo4j数据库的数据文件的路径, 以打开一个数据库graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory);//创建事务try ( Transaction tx = graphDb.beginTx() ) {Node city1 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CITY)));city1.setProperty("name", "浙江");city1.setProperty("abbreviation", "浙");Node city2 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CITY)));city2.setProperty("name", "河南");city2.setProperty("abbreviation", "豫");Node cap1 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CAPITAL)));cap1.setProperty("name", "杭州");Node cap2 = graphDb.createNode(new CaseLabel(String.valueOf(MyLabels.CAPITAL)));cap2.setProperty("name", "郑州");cap1.createRelationshipTo(city1,MyRelation.BELONG);cap2.createRelationshipTo(city2,MyRelation.BELONG);//提交事务tx.success();}}//根据省份查省会void searchCapital(String provinceName) {graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( databaseDirectory );try ( Transaction tx = graphDb.beginTx()){Node startNode = graphDb.findNode(new CaseLabel(String.valueOf(MyLabels.CITY)), "name", provinceName);//Direction介绍:从起始节点来看,它是一个传出关系OUTGOING;从结束节点看是传入关系INCOMING;方向不重要时使用BOTH=OUTGOING+INCOMINGIterable<Relationship> iterable = startNode.getRelationships(MyRelation.BELONG, Direction.INCOMING);for (Relationship r : iterable) {Node node = r.getStartNode();long id = node.getId();String name = (String)node.getProperty("name");System.out.println(id + " " + name+ " ");}tx.success();tx.close();tx.success();}}//根据省会查省份void searchProvince(String capitalName) {graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( databaseDirectory );try ( Transaction tx = graphDb.beginTx()){Node startNode = graphDb.findNode(new CaseLabel(String.valueOf(MyLabels.CAPITAL)), "name", capitalName);//Direction介绍:从起始节点来看,它是一个传出关系OUTGOING;从结束节点看是传入关系INCOMING;方向不重要时使用BOTH=OUTGOING+INCOMINGIterable<Relationship> iterable = startNode.getRelationships(MyRelation.BELONG, Direction.OUTGOING);for (Relationship r : iterable) {//注意这里使用EndNodeNode node = r.getEndNode();long id = node.getId();String name = (String)node.getProperty("name");String abbreviation = (String)node.getProperty("abbreviation");System.out.println(id + " " + name+ " "+abbreviation);}tx.success();tx.close();tx.success();}}void shutDown(){System.out.println( "关闭数据库 ..." );// 关闭数据库graphDb.shutdown();}private static void registerShutdownHook( final GraphDatabaseService graphDb ){// 用来确保数据库正确关闭的 一个回调方法Runtime.getRuntime().addShutdownHook( new Thread(){@Overridepublic void run(){graphDb.shutdown();}} );}
}

(3)测试,这里需要关闭neo4j的cmd窗口。这里三块代码按顺序执行,调用时需要把其他步骤的代码注释掉:
第一步是插入数据,第二步是查省会,第三步是查省份。

  		/*repository.createDb();repository.shutDown();*///repository.searchCapital("浙江");repository.searchProvince("郑州");

最后的图大概长这样
在这里插入图片描述


http://chatgpt.dhexx.cn/article/cvCK0QDA.shtml

相关文章

Neo4j语法教程

neo4j简版教程 create (<node-name:<label-name2>:<label-name2>......>) return <node-name> 可以给一个节点创建多label的node eg: CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" }) Neo4j CQL创…

【数据库】linux安装neo4j教程(neo4j 4.x)

一.配置jdk neo4j 4.x版本依赖jdk11&#xff0c;需要安装jdk11才能正常启动&#xff08;安装高版本或低版本jdk都不行&#xff09; 1&#xff09;执行uname -a看下系统架构 2&#xff09;根据系统架构下载对应安装包 https://www.oracle.com/java/technologies/javase/jdk11…

linux neo4j 教程,Neo4j 入门教程 - 安装

本篇来简单介绍下如何下载并安装 Neo4j&#xff0c;篇目很短&#xff0c;因为真的很简单。 下载 Neo4j 首先在 https://neo4j.com/download/ 下载 Neo4j。你可以选择企业体验版或者免费的社区版&#xff0c;这里我是用的社区版。点击 Download 按钮即可开始下载。 网站会自动下…

使用Docker安装neo4j教程

拉取镜像源 docker pull neo4j(:版本号) //缺省 “:版本号” 时默认安装latest版本的查看本地镜像 docker images启动容器 docker run -d --name container_name -p 7474:7474 -p 7687:7687 -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var…

neo4j教程 java_neo4j 教程

Neo4j是一个世界领先的开源图形数据库。 它是由Neo技术使用Java语言完全开发的。本教程将教你Neo4j的基础知识&#xff0c;Java与Neo4j和Spring DATA与Neo4j。 本教程分为Neo4j简介&#xff0c;Neo4j CQL&#xff0c;Neo4j CQL函数&#xff0c;Neo4j管理员&#xff0c;Neo4j与J…

最详细的Neo4J解读(附安装教程)

文章目录 一、Neo4j简介二、Neo4j - 特点和优势1.Neo4j的特点2.Neo4j的优点3.Neo4j的缺点或限制 三、Neo4j - 数据模型四、Neo4j安装及配置1.安装Java JDK2.下载安装Neo4j3.创建系统环境变量4.Neo4j的启动和停止5.切换数据库 五、Neo4j的CQL操作 一、Neo4j简介 Neo4j是一种流行…

图数据库Neo4j实战(全网最详细教程)

1.图数据库Neo4j介绍 1.1 什么是图数据库&#xff08;graph database&#xff09; 随着社交、电商、金融、零售、物联网等行业的快速发展&#xff0c;现实社会织起了了一张庞大而复杂的关系网&#xff0c;传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数…

neo4j入门

目录 一、安装 二、CQL使用 三、Springboot(2.4以上版本)整合neo4j 四、使用过程中的问题 1、自定义查询&#xff0c;cql无法接收变量 2、使用依赖去操作neo4j只有return才会执行 3、neo4j和mysql事务冲突 补充 一、安装 1、首先要配置jdk&#xff0c;默认电脑中有jdk…

Neo4j 安装、使用教程

文章目录 一、Neo4j 的安装与配置1、安装JDK2、安装Neo4j3、Neo4j环境变量配置4、启动服务器 二、Neo4j 使用教程 一、Neo4j 的安装与配置 1、安装JDK 由于Neo4j是基于Java的图形数据库&#xff0c;运行Neo4j需要启动JVM进程&#xff0c;因此必须安装JAVA SE的JDK。配置 JDK环…

neo4j新手教程

neo4j新手教程 本文通过一个实际的案例来一步一步使用Cypher来操作Neo4j。 这个案例的节点主要包括专业和课程两类&#xff0c;课程和课程之间有前置、并列等关系&#xff0c;专业和课程之间有包含等关系。 1、&#xff08;可选&#xff09;首先&#xff0c;我们删除数据库中…

微信开发者工具元素快速定位审查元素

一般浏览器里鼠标在元素上右键点击审查元素或检查元素即可快速打开开发者工具并定位到该元素&#xff0c;但在微信开发者工具中不支持&#xff0c; 解决方法 点击 elements左边的 小鼠标 图片&#xff0c;然后在主页面点击元素即可快速定位

代码审查规范(试用版)

目录 1、背景 2、目标 3、流程 4、指定代码审查规范 4.1、命名风格 4.2、常量定义 4.3、代码风格 4.4、注释风格 4.5、控制语句 5、执行代码审查规范 6、开展PR Bash活动 1、背景 2019年已成历史&#xff0c;2020年已经悄然到来。2019年&#xff0c;我们的研发团队经…

sonar代码审查

sonar代码审查 sonarqube简介七个方面检测代码质量sonarqube结构组件集成方式 sonar部署部署须知sonar搭建步骤1.查看本地环境2.查看java环境3.安装mysql4.安装及配置sonar5.启动sonar启动启动遇到的问题 sonar代码扫描一、使用sonar-scanner进行本地扫描二、使用Android studi…

代码审查

代码审查&#xff1a; 一种有效帮助提升代码质量的有效途径。 代码审查3W(what why when)常见的代码审查工具代码审查流程 1.代码审查3W(what why when)&#xff1a; 代码审查&#xff1a;对计算机源代码系统化的审查&#xff0c;常用软件同行评审的方式进行&#xff0c;目…

java 代码审查_代码审查(Code Review)清单

代码审查可以帮助提高代码质量,避免由于代码习惯而造成的 bug。下面列出的这些要点因该可以作为大部分代码审查的指导,如果是 Java 应用的话,这些建议应该被视作最佳实践。 文档 1. Javadoc 应该在每一个类和方法中添加。 2. 如果是修复某个 bug,应该添加 bug ID。 3. 走捷…

静态代码审查

本篇介绍静态代码审查的意义以及如何在Android studio中集成它们。需要注意的是&#xff0c;这些工具不是万能的&#xff0c;虽然它们能高效且全面地执行代码检查工作&#xff0c;但它们并不具备人类的“逻辑思维”优势。也就是说&#xff0c;静态代码审查工具是无法确保程序逻…

代码审查的必要性和最佳实践

目录 代码审查的流程 代码审查的争议 加班要累死了&#xff0c;完成项目都来不及&#xff0c;还做什么代码审查&#xff1f; 代码审查太费时间&#xff0c;改来改去无非是一些格式、注释、命名之类不痛不痒的问题。 团队的习惯和流程就是不做代码审查&#xff0c;大家都是…

如何审查网页元素

如何审查网页元素 对于一个优秀的爬虫工程师而言&#xff0c;要善于发现网页元素的规律&#xff0c;并且能从中提炼出有效的信息。因此&#xff0c;在动手编写爬虫程序前&#xff0c;必须要对网页元素进行审查。本节将讲解如何使用“浏览器”审查网页元素。 浏览器都自带检查…

代码审查(文档整理)

常用的代码审查工具 git/SUBVERSIONGerritUpsource显示代码变更√√√使用源码仓库√√在线代码讨论√√异步审查支持√√使用协议GPLv2/Apache License 2.0Apache License 2.0付费license 代码审查 范根检查法 轻量级的审查流程 结对编程同步代码审查异步代码审查 代码审查需…