Neo4j基础理论、Linux安装与Windows安装以及CQL语法(增删改查、排序、分页、去重)

一、什么是Neo4j?

Neo4j是一个开源的 无Shcema的 基于java开发的 图形数据库,它将结构化数据存储在图中而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。程序数据是在一个面向对象的、灵活的网络结构下,而不是严格、静态的表中,但可以享受到具备完全的事务特性、企业级的数据库的所有好处。
数据库排名

二、Neo4j 模块构建

1、Neo4j 主要构建块

  • 节点
  • 属性
  • 关系
  • 标签
  • 数据浏览器
  1. 节点
    节点是图表的基本单位。 它包含具有键值对的属性

  2. 属性
    属性是用于描述图节点和关系的键值对
    Key =值
    其中Key是一个字符串 值可以通过使用任何Neo4j数据类型来表示

  3. 关系
    关系是图形数据库的另一个主要构建块。 它连接两个节点,如下所示
    在这里插入图片描述
    这里Emp和Dept是两个不同的节点。 “WORKS_FOR”是Emp和Dept节点之间的关系。
    因为它表示从Emp到Dept的箭头标记,那么这种关系描述的一样
    Emp WORKS_FOR Dept
    每个关系包含一个起始节点和一个结束节点。
    这里“Emp”是一个起始节点。
    “Dept”是端节点。
    由于该关系箭头标记表示从“Emp”节点到“Dept”节点的关系,该关系被称为“进入关系”到“Dept”节点。并且“外向关系”到“Emp”节点。
    像节点一样,关系也可以包含属性作为键值对。

  4. 标签
    Label将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签。 我们可以从现有节点或关系中删除现有标签。
    从前面的图中,我们可以观察到有两个节点。
    左侧节点都有一个标签:“EMP”,而右侧节点都有一个标签:“Dept”。
    这两个节点之间的关系,也有一个标签:“WORKS_FOR”
    注: -Neo4j将数据存储在节点或关系的属性中。

2、Neo4j的主要应用场景

  1. 社交媒体和社交网络
    当使用图形数据库为社交网络应用程序提供动力时,可以轻松利用社交关系或根据活动推断关系。查询社区聚类分析,朋友的朋友推荐,影响者分析,共享和协作关系分析等
  2. 推荐引擎和产品推荐系统
    图形驱动的推荐引擎通过实时利用多种连接,帮助公司个性化产品,内容和服务。内容和媒体推荐,图形辅助搜索引擎,产品推荐,专业网络,社会推荐。
  3. 身份和访问管理
    使用图形数据库进行身份和访问管理时,可以快速有效地跟踪用户,资产,关系和授权。查询访问管理,资产来源,数据所有权,身份管理,互连组织,主数据,资源授权
  4. 金融反欺诈多维关联分析场景
    通过图分析可以清楚地知道洗钱网络及相关嫌疑,例如对用户所使用的帐号、发生交易时的IP地址、MAC地址、手机IMEI号等进行关联分析。

3、Neo4j环境搭建

  1. Neo4j环境Linux下搭建
    (1).切换到Linux下 到安装目录neo4j 上传安装包 或者 下载安装包
    使用 ftp 工具上传neo4j-community-3.5.17.tar 到 liunx 下或者 wget https://neo4j.com/artifact.php?name=neo4j-community-3.5.17-unix.tar.gz
    (2). 解压
    tar -xvf neo4j-community-3.5.17.tar
    (3). 修改配置文件 neo4j.conf
    vi conf/neo4j.conf
    主要是修改 允许远程访问的地址 把对应的注释打开即可
    dbms.connectors.default_listen_address=0.0.0.0
    (4).开放对应的访问端口 默认要开放7474 和 7687
    firewall-cmd --zone=public --add-port=7474/tcp --permanent
    firewall-cmd --zone=public --add-port=7687/tcp --permanent
    systemctl reload firewalld
    (5).启动
    ./bin/neo4j start
    (6).使用浏览器 访问服务器上的 neo4j
    http://192.168.211.133:7474
    默认的账号是 neo4j 密码 neo4j 这里第一次登录的话会要求修改密码

  2. Windows下的安装
    (1).从https://neo4j.com/download-center/#community 下载最新的Neo4j Server安装文件可以看到 neo4J 软件 exe 或 zip 格式的所有版本
    (2).下载 Neo4j 3.5.17 (zip)
    (3).解压
    (4).修改配置文件
    dbms.connectors.default_listen_address=0.0.0.0
    (5) . 通过 neo4j.bat install-service 安装neo4j服务
    注意的问题 如果是4.0 以及以上版本需要jdk11
    修改文件 bin/neo4j.ps1
    Import-Module “neo4j的主目录\bin\Neo4j-Management.psd1”
    (6).neo4j.bat启动
    neo4j.bat start
    (7).使用浏览器 访问服务器上的 neo4j
    http://127.0.0.1:7474
    默认的账号是 neo4j 密码 neo4j 这里第一次登录的话会要求修改密码

4、Noe4j数据浏览器

  1. 数据浏览器访问
    一旦我们安装Neo4j,我们可以访问Neo4j数据浏览器使用以下URL
    http:// localhost:7474/browser/
    在这里插入图片描述

Neo4j数据浏览器用于执行CQL命令并查看输出输出。
这里我们需要在美元提示符处执行所有CQL命令:“$” 如 CREATE(cc:CreditCard)在美元符号后键入命令,然后单击“执行”按钮运行命令。
它与Neo4j数据库服务器交互,检索和显示下面的结果到那个美元提示。
使用“VI视图”按钮以图形格式查看结果。 上图以“UI视图”格式显示结果
在这里插入图片描述

导出 CSV 或者 JSON
单击“导出CSV”按钮以csv文件格式导出结果

三、Neo4j CQL

1、CQL简介

CQL代表Cypher查询语言。 像关系型数据库具有查询语言SQL,Neo4j使用CQL作为查询语言。
Neo4j CQL

  • 它是Neo4j图形数据库的查询语言。
  • 它是一种声明性模式匹配语言。
  • 它遵循SQL语法。
  • 它的语法是非常简单且人性化、可读的格式。

常用的Neo4j CQL命令/条款如下:
在这里插入图片描述

基于庆余年电视剧人物关系图片:
在这里插入图片描述

2、CREATE

CREATE (
	<node-name>:<label-name>
	[{
		<property1-name>:<property1-Value>
		........
		<propertyn-name>:<propertyn-Value>
	}]
)

语法说明:在这里插入图片描述

举例:

CREATE (person:Person {cid:1,name:"范
闲",age:24,gender:0,character:"A",money:1000});
CREATE (person:Person {cid:2,name:"林婉
儿",age:20,gender:1,character:"B",money:800});
CREATE (person:Person {cid:3,name:"庆
帝",age:49,gender:0,character:"A",money:8900});

3、MATCH RETURN命令语法

MATCH
(
	<node-name>:<label-name>
) 
RETURN
	<node-name>.<property1-name>,
	...
	<node-name>.<propertyn-name>

在这里插入图片描述

举例:

MATCH (person:Person) return person
MATCH (person:Person) return person.name,person.age

4、关系创建

  1. 使用现有节点创建没有属性的关系
MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
CREATE
(<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-name>)
RETURN 相应的内容

语法说明:
在这里插入图片描述

创建关系
match(person:Person {name:"范闲"}) ,(person2:Person {name:"林婉儿"})
create(person)-[r:Couple]->(person2);
查询关系
match p = (person:Person {name:"范闲"})-[r:Couple]->(person2:Person) return p
match (p1:Person {name:"范闲"})-[r:Couple]-(p2:Person) return p1,p2
match (p1:Person {name:"范闲"})-[r:Couple]-(p2:Person) return r
  1. 使用现有节点创建有属性的关系
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
	(<node1-label-name>)-[<relationship-label-name>:<relationship-name>
	{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
其中<define-properties-list> 是分配给新创建关系的属性(名称 - 值对)的列表。
{
	<property1-name>:<property1-value>,
	<property2-name>:<property2-value>,
	...
	<propertyn-name>:<propertyn-value>
}
match(person:Person {name:"范闲"}),(person2:Person {name:"林婉儿"})
create(person)-[r:Couple{mary_date:"12/12/2021",price:55000}]->(person2)
return r;
  1. 使用新节点创建没有属性的关系
CREATE
(<node1-label-name>:<node1-name>)
-[<relationship-label-name>:<relationship-name>]
->(<node1-label-name>:<node1-name>)
create(person1:Person {cid:4,name:"长公
主",age:49,gender:1,character:"A",money:5000})
-[r:Friend]->
(person2:Person {cid:7,name:"九品射手燕小
乙",age:48,gender:0,character:"B",money:1000})
  1. 使用新节点创建有属性的关系
CREATE
(<node1-label-name>:<node1-name>{<define-properties-list>})
-[<relationship-label-name>:<relationship-name>{<define-properties-list>}]
->(<node1-label-name>:<node1-name>{<define-properties-list>})
create (person1:Person {cid:9,name:"靖王世
子",age:23,gender:0,character:"A",money:3000})
<-[r:Friend {date:"11-02-2021"}]->
(person2:Person {cid:8,name:"二皇子",age:24,gender:0,character:"B",money:6000})

关系和节点的属性可以使用的类型
在这里插入图片描述

5、CREATE创建多个标签

CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
如:
CREATE (person:Person:Beauty:Picture {cid:20,name:"小美女"})

6、WHERE 子句

简单的WHERE子句
WHERE <condition>
复杂的WHERE子句
WHERE <condition> <boolean-operator> <condition>

where 中的比较运算符 和 之前mysql的相同 如 = != <> > < 等
在这里插入图片描述

MATCH (person:Person)
WHERE person.name = '范闲' OR person.name = '靖王世子'
RETURN person

7、DELETE 子句 和 REMOVE子句

DELETE 子句

  • 删除节点
  • 删除节点及相关节点和关系
match p = (:Person {name:"林婉儿"})-[r:Couple]-(:Person) delete r

REMOVE子句

  • 删除节点或关系的标签
  • 删除节点或关系的属性
MATCH (person:Person {name:"小美女"})
REMOVE person.cid

8、SET子句

  • 向现有节点或关系添加新属性
  • 更新属性值
MATCH (person:Person {cid:1})
SET person.money = 3456,person.age=25

9、ORDER BY 子句

“ORDER BY”子句,对MATCH查询返回的结果进行排序。
我们可以按升序或降序对行进行排序。
默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

MATCH (person:Person)
RETURN person.name,person.money
ORDER BY person.money DESC

10、SKIP 和 LIMIT

Neo4j CQL已提供“SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。
Neo4j CQL已提供“LIMIT”子句来过滤或限制查询返回的行数。 它修剪CQL查询结果集底部的结果。

MATCH (person:Person)
RETURN ID(person),person.name,person.money
ORDER BY person.money DESC skip 4 limit 2

11、DISTINCT 去重

这个函数的用法就像SQL中的distinct关键字,返回的是所有不同值

MATCH (p:Person) RETURN Distinct(p.character)