Neo4j 系列(1) —— 初识 Neo4j
初识 Neo4j
文章目录
- 初识 Neo4j
- 前置知识
- 什么是图数据库
- 图数据库诞生的背景
- 图数据库的应用场景
- Neo4j
- 什么是 Neo4j
- Neo4j 的安装
- 1. Linux 的安装
- 2. Docker 的安装
- Neo4j 的使用 (Cypher QL)
- 1. Neo4j 的构建元素
- Cypher QL 的使用
- 创建节点
- 创建关系
- 查询
- 设置属性
- 删除操作
- 使用索引
- 使用约束
- 最短路径
前置知识
什么是图数据库
图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,图数据库主要用于存储更多的连接数据
图数据库诞生的背景
随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,急需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。
图数据库的应用场景
- 社交领域:Facebook, Twitter,Linkedin用它来管理社交关系,实现好友推荐
- 零售领域:eBay,沃尔玛使用它实现商品实时推荐,给买家更好的购物体验
- 金融领域:摩根大通,花旗和瑞银等银行在用图数据库做风控处理
- 汽车制造领域:沃尔沃,戴姆勒和丰田等顶级汽车制造商依靠图数据库推动创新制造解决方案
- 电信领域:Verizon, Orange和AT&T 等电信公司依靠图数据库来管理网络,控制访问并支持客户
- 酒店领域:万豪和雅高酒店等顶级酒店公司依使用图数据库来管理复杂且快速变化的库存图数据库并非指存储图片的数据库,而是以图数据结构存储和查询数据。
Neo4j
什么是 Neo4j
Neo4j是一个开源的NoSQL图形数据库,2003 年开始开发,使用 scala和java 语言,2007年开始发布。
- 是世界上最先进的图数据库之一,提供原生的图数据存储,检索和处理;
- 采用属性图模型(Property graph model),极大的完善和丰富图数据模型;
- 专属查询语言 Cypher,直观,高效;
Neo4j 的官网链接:https://neo4j.com/
Neo4j 的安装
Neo4J 官网的下载地址 https://neo4j.com/download-center/#community
1. Linux 的安装
# 首先进入Neo4J 需要安装的目录,然后上传 Neo4J 的压缩包并且解压
cd /usr/local/
# 解压 Neo4J 的压缩包
tar -zxf neo4j-community-3.5.30-unix.tar
# 进入 Neo4J 的目录
cd neo4j-community-3.5.30/
# 修改配置文件
vi conf/neo4j.conf
# =============== 修改注释 ================
# 将下列内容前的注释给去掉,以便其他机器可以建立连接
dbms.connectors.default_listen_address=0.0.0.0
dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:7687
dbms.connector.http.listen_address=:7474
dbms.connector.https.listen_address=:7473
#======================================
# 启动 neo4j
bin/neo4j console
随后便可以在浏览器中直接使用 http://{ip_address}:7474/browser/
便可以进行访问
PS: Neo4j 4.X 版本需要 java 11 以上
2. Docker 的安装
# 拉取docker镜像
docker pull neo4j:3.5.22-community
# 运行镜像
docker run -d -p 7474:7474 -p 7687:7687 --name neo4j \
-e "NEO4J_AUTH=neo4j/123456" \
-v /usr/local/soft/neo4j/data:/data \
-v /usr/local/soft/neo4j/logs:/logs \
-v /usr/local/soft/neo4j/conf:/var/lib/neo4j/conf \
-v /usr/local/soft/neo4j/import:/var/lib/neo4j/import \
neo4j:3.5.22-community
Neo4j 的使用 (Cypher QL)
1. Neo4j 的构建元素
标签
标签(Label)将一个公共名称与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。标签用冒号表示例如 :label
节点
节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录,就像关系数据库中的一条记录一样。在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。
节点在 CQL 一般用小括号来表示,例如 (p:Product)
关系
关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) 。
基于方向性,Neo4j关系被分为两种主要类型:
- 单向关系 单向关系用
()-[]->()
来表示 - 双向关系 双向关系用
()-[]-()
来表示
属性
属性(Property)是用于描述图节点和关系的键值对。其中Key是一个字符串,值可以通过使用任何Neo4j数据类型来表示。属性用大括号来表示。例如 {key:value}
Cypher QL 的使用
创建节点
# 创建单个节点
create (p)
# 创建多个节点
create (q),(r)
# 创建带有标签的节点
create (a:label_a)
# 创建多标签节点
create (n:label_a:laberl_b)
# 创建带有标签属性的节点
create (n:person {name:'如来'})
# 创建节点还可以使用关键字 MERGE,即以合并的方式来创建。在使用这种方式创建节点时,将会检查节点存在与否,如果节点已经存在,则使用已有的节点;如果节点不存在,则创建一个新节点。
MERGE(n:Test {name:"c"})ON CREATE SET n.created = timestamp()
创建关系
#使用新节点创建关系
CREATE (n:person {name:'杨戬'})-[r:师傅]->(m:person {name:'玉鼎真人'}) return type(r)
#使用已知节点创建带属性的关系
match (n:person {name:'沙僧'}),(m:person{name:'唐僧'}) create (n)-[r:`师傅`{relation:'师傅'}]->(m) return r
查询
# 依据标签查询节点
match(n:person) return n
# 依据标签属性进行查询
match(n:person {property:"value"}) return n
# 跳过前几个输出
match(n:person) return n skip 2
# 限制输出个数
match(n:person) return n limit 2
# 显示查询节点的属性值
match(n:person) return id(n),n.name
# 使用 where 语句进行查询
match(n:person) where n.name='张三' and n.name='李四' return n
# 寻找某属性为空值的节点
match(n:person) where n.level is null return n
# 寻找属性值在某集合中的节点
match(n:person) where n.name in ['张三','李四'] return n
# 对查询结果进行排序
match(n:'person') return id(n),n.name order by id(n) desc
# 对于查询结果进行去重输出
match(n:'person') return distinct(n.name)
# 对查询结果进行统计
match(n:'person') return count(n)
# 对查询结果进行联合
match(n:'person') return n.name as name
union
match(m:'character') return m.name as name
# 检索有关系的相关节点
match (n:person)-[r]-(m:person) return n,r,m
# 使用WITH可以将上一条查询语句的结果链接起来,用于下一条查询语句之中,即起到一种管道的功能。下列查询语句使用WITH引用了MATCH子句的a和b。
MATCH(a)-[:KNOWS]->(b)
WITH a,count(b)AS knows
WHERE knows > 0
RETURN a
设置属性
# 按照条件搜索节点并为节点添加新的属性
MATCH (n:role {name:"fox"}) set n.age=32
# 也可以使用 unwind 语句配合 set 语句向节点中添加多个属性
UNWIND[{age:30},{addr:"sz"}] AS prop
MERGE(n:Test {name:"b"})
SET n += prop
删除操作
# 删除节点
match (n:person {name:'张三'}) delete n
# 删除关系
match (n:person {name:'张三'})<-[r]-(m) delete r
# 删除属性
match (n:person {name:'张三'}) remove n.age
使用索引
# 为某标签的的某属性创建索引
CREATE INDEX ON :Person(name)
# 删除索引
DROP INDEX ON :Person(name)
使用约束
在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。 根据我们对某些节点或关系的应用需求,我们必须避免这种重复。
# 创建约束
CREATE CONSTRAINT ON(p:Person)
ASSERT p.name IS UNIQUE
# 删除约束
DROP CONSTRAINT ON(p:Person)
ASSERT p.name IS UNIQUE
最短路径
# 找到其中一条最短路径
MATCH(p1:Person { name:"观众10" }),(p2:Person { name:"观众15" }),
p = shortestpath((p1)-[*..10]-(p2))
RETURN p
# 显示所有的最短路径
MATCH(p1:Person { name:"观众10" }),(p2:Person { name:"观众15" }),
p =allshortestpaths((p1)-[*..10]-(p2)
RETURN p
Neo4j 系列(1) —— 初识 Neo4j相关推荐
- neo4j安装_SpringBoot使用Neo4j
1.Neo4j简介 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在 ...
- neo4j中文社区 php,neo4j 社区版搭建教程
neo4j搭建教程 版本说明 软件 版本 jdk jdk1.8.0_201 neo4j需要提前按照java8 并且配置好jdk neo4j-community 3.5.14 neo4j 社区版 硬件环 ...
- Neo4j登录报错Neo4j Server shutdown initiated by request解决
Neo4j登录报错Neo4j Server shutdown initiated by request解决 cmd运行neo4j.bat console,出现一大串错误,如图 丧心病狂,一通百度谷歌b ...
- 数据仓库系列:初识数仓
数据仓库系列:初识数仓 前言: 本节是数据仓库系列文章的第一篇,本系列的目的在于快速的构建一套最小化可运行的基础数据体系,过程中也会涉及一些数仓的理论知识,但更偏重的是数仓的实现和背后的思考逻辑.所以 ...
- PyTorch源码学习系列 - 1.初识
本系列文章会优先发布于微信公众号和知乎,欢迎大家关注 微信公众号:小飞怪兽屋 知乎: PyTorch源码学习系列 - 1.初识 - 知乎 (zhihu.com) 目录 本系列的目的 PyTorch是什 ...
- python爬虫系列之初识爬虫
python爬虫系列之初识爬虫 前言 我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识 ...
- neo4j 机器学习_知识图谱实战系列四:neo4j的介绍和使用
一般情况下,我们使用数据库查找事物间的联系的时候,只需要短程关系的查询(两层以内的关联).当需要进行更长程的,更广范围的关系查询时,就需要图数据库的功能. 而随着社交.电商.金融.零售.物联网等行业的 ...
- Neo4j系列-解读《权力的游戏》下
安装APOC 参考文章:https://mp.csdn.net/postedit/81907108 图论 知乎上讨论图论概念: https://www.zhihu.com/question/2261 ...
- neo4j安装_基于Neo4j的知乎关系爬虫
贴一个16年当时写的一个爬取知乎用户follow关系的爬虫.做这个爬虫是受一个知乎专栏的启发Web Crawler with Python - 09.怎样通过爬虫找出我和轮子哥.四万姐之间的最短关系, ...
最新文章
- python盘点订单_django解决订单并发问题【推荐】
- 枚举(Enumerations)
- Transformer-LS霸榜ImageNet,输入长度提升三倍!极度压缩参数
- [斯坦福创业课]Jeff谈LinkedIn的同理心管理
- java annotation list_Java 注解 (Annotation)你可以这样学
- 调试跟踪利器---strace
- faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法
- Ubuntu on Windows,在Windows上的Ubuntu
- 机器学习基础(三十二) —— 使用 Apriori 算法进行关联分析
- 机器学习鸢尾花数据集分析
- C# 反编译修改dll文件
- iOS 常用正则表达式一览表
- C++实现字符串去掉前后的空格
- guess在Java中用法_guess的用法
- 用java实现螺旋矩阵算法
- Vue3的reactive函数
- 每个工程师都应该知道的事——射频发射机功率怎么测量
- CHNG时间分片奖励发布
- java仿QQ聊天室群聊(快速写一个简易QQ)
- 简读《Head First设计模式》