1.环境搭建
文件下载
neo4j需要javaJDK,不同版本的neo4j需要的版本也不同,注意甄别。
JAVAJDK与neo4j可以参考Neo4j安装与配置以及JDK安装与配置教程(超详细)_neo4j 数据库javase1.8-CSDN博客
或最新版本Neo4j的安装、配置和一丢丢使用要点(包括jdk配置),超详细教程_neo4j安装教程windows-CSDN博客
或者neo4j环境搭建与基本语法也可以参考Neo4j 安装、使用教程_neo4j菜鸟教程-CSDN博客。
neo4j的下载地址:Neo4j Deployment Center - Graph Database & Analytics
点击进入后直接下拉找到图片然后下载对应系统版本的neo4j即可。点击下载后会出现如下界面,如果没有自动弹出下载链接点击中间蓝色的here打开下载链接。
也有桌面版与Docker的neo4j(没有尝试,此处就不写了)
下载完成后解压即可
没有import文件夹的可以新建,引入文件时需要将文件放入该文件夹里。
环境配置
打开系统环境变量,新建一个系统变量。变量名为:NEO4J_HOME,变量值:Neo4j主目录。(我的是C:\Apps\neo4j\neo4j-community-5.22.0-windows\neo4j-community-5.22.0),然后找到系统变量Path,新建一个,编辑为:%NEO4J_HOME%\bin。
启动服务器
打开cmd,输入neo4j console
出现如上界面代表neo4j已经启动了,如果没有上述界面可能是javajdk版本与neo4j不匹配,neo4j的版本下错了,或者配置环境有问题,可以仔细找一下原因。
cmd出现started后不要关闭,在浏览器输入http://localhost:7474/后即可跳转neo4j的界面,初始的用户名和密码均是neo4j,点击连接后按照要求更改密码即可。
浏览器界面
左上角为数据库管理,小星星为收藏管理(官方的教程也在里面),中间的黑框即程序语句的输入框,每次输入完代码后,回车或点击右边三角即运行此框的程序语句,左下角齿轮为设置。
2.简单的语法规则
neo4j本身也有示范程序,很经典,可以点击并运行学习体会neo4j从建立到查询到删除。
neo4j使用的是Cypher,关键字不区分大小写,但是名称区分(如节点名字),此处谨分享自己的简单的学习笔记。
创建:
创建节点:
create (别名:节点名 {属性名:属性值})
eg:CREATE (p:Person {name:'Mike'})
p为person的别名,person有一个name属性,属性值为Mike
可以有多个属性,如
eg:CREATE (p:Person {name:'Mike',grade:'two'})
创建关系:
MATCH (a:Person {name:'Mike'}),
(b:Person {name:'Sara'})
MERGE (a)-[:FRIENDS]->(b)
方括号为关系,FRIENDS为关系类型,此处->代表方向。
关系也可以有属性,如可以用[:FRIENDS{since:2006}]添加属性
创建融合节点:
有时想要创建一个节点指向很多节点,这时如果用create会产生很多一对一的节点,我们需要采用merge
eg:
merge (a:pinlei {name: row.品类属性})
merge (b:pinpai {name: row.品牌属性})
merge (a)-[:相关]-(b)
即建立了品类与品牌的相关关系。
读取文件(csv)创建对象:
以美妆产品的csv为例,文件需要放入meo4j的import文件夹中,文件格式须为csv,utf-8编码。
假设表格中有关于产品相关属性的内容,导入
eg:LOAD CSV WITH HEADERS FROM 'file:///meizhuangtest.csv' AS row
CALL {
with row
merge (a:pinlei {name: row.品类属性})
merge (b:pinpai {name: row.品牌属性})
merge (c:chanpin {name:row.美妆产品属性})
merge (d:guobie {name: row.国别属性})
merge(e:gongxiao{name:row.功效属性})
merge (f:jaige {name: row.价格区间})
merge (a)-[:相关]-(b)
merge (b)-[:产品]->(c)
merge (c)-[:国家]->(d)
merge (c)-[:功效]->(e)
merge (c)-[:价格]->(f)
}
就会读取表格中品类属性,品牌属性,美妆产品属性等列的内容作为pinlei,pinpai,chanpin等不同类型的节点,并建立了品类相关品牌,品牌的有相关产品等关系。查询结果如下。
删除:
删除节点:
MATCH (p:person {name:'Mike'}) DELETE p
我的理解是match类似于sql的select用法,找到person中name为Mike的进行删除
删除有关系的节点:
MATCH (a:Person {name:'Mike'})-[rel]-(b:Person) DELETE a,b,rel
删除Mike及与他有关系的节点与关系(此处rel没有方向,及所有关系都删除,若-[rel]->则删除Mike及Mike指向其他人的节点与关系)
删除节点的属性:
MATCH (a:Person {name:'Mike'}) REMOVE a.grade
删除Mike的grade属性
删除所有节点:
MACTH (n) DETACH DELETE n
查询:
使用match进行查询,查询的方式有很多种。
eg:
MATCH (n:pinlei)
WHERE n.name = '口红'
return n
查找标签名为pinlei的节点为n,where限定pinlei的name为口红(类似于SQL的where),最终返回节点n。
eg:
查询品牌香奈儿的相关产品,程序语句为寻找pinpai节点与其指向其他节点,返回节点与关系,注意此时指定了是指向关系。
MATCH (n:pinpai)-[r]->(m) where n.name='香奈儿'RETURN n,r,m
eg:
如果没有箭头则是查询所有有关系的节点,没有方向限制
查询具体的产品和其相关属性:
eg:MATCH (n:chanpin)-[r]-(m) where n.name='香奈儿口红'RETURN n,r,m
在查看查询结果时,也有多种表现形式,以查询香奈儿口红为例,点击左侧的Table,即展现表格形式的对象:
点击左侧的Text,展现文本形式(底部调整显示宽度):
点击Code显示代码形式结果:
3.其他的小介绍
节点按钮:
以下说明仍以美妆文件导入的数据为例。
在我查询的是口红后,出现的节点进行点击,会出现三个按钮:
点击左侧的锁的按钮,就会收起三个按钮。(用处不大,点击空白处效果相同)
点击右侧的眼睛按钮,隐藏此节点与其关系。
点击下方的按钮,会展示所有与其有关(单向,双向)的节点。
此时再次点击该按钮会收起有关系的节点。
注意,如果展示的节点与已显示的节点有关系也会被展示出来。如下面的例子:
点击展示“香奈儿护...”的节点的展示按钮后,其他的关系与之有关的也被展示出来了
节点颜色大小设置
有时需要根据关系调整大小与颜色以便于区分,可以使用右侧改变显示效果。
使用color改变颜色,size改变大小
快速定位,放大,缩小
将查询的节点图像进行放大,缩小,与快速定位(即显示整个查询的图像概览)可以点击显示的右下角。
也可以使用ctrl键加鼠标滚轮快速调整大小。