对于数据,需要将EXCEL另存为CSV,如果有多个sheet,则需要分开单独存储。并且需要将编码更改为utf-8,否则数据库无法显示中文。
我准备了6个文件(其中4个属性文件——用于创建节点;2个关系文件——用于创建关系):
1.student.csv
2.school.csv
3.address.csv
4.teacher.csv
5.关系文件:student_school.csv
6.关系文件:relation.csv
其中,第四列存在缺失值
快捷键 win+R
,输入cmd,运行命令行界面,输入neo4j.bat console启动neo4j。
之后打开浏览器,输入网址:http://localhost:7474/
即可看到neo4j的启动界面
进入neo4j安装目录下的import文件夹(我的是:D:\software\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\import)
将准备好的用于创建节点的文件(student.csv和school.csv)复制到该目录下。
在noo4j的输入框中输入:
USING PERIODIC COMMIT 300 LOAD CSV WITH HEADERS FROM 'file:///student.csv' AS line
create (:student {stu_name:line.姓名,age:line.年龄,id:line.id})
运行之后便创建好了节点student。
MATCH (n:student) RETURN n LIMIT 25
MATCH (n:Tag) #tag为节点标签
#以该节点的id字段为统计依据
WITH n.id AS id, COLLECT(n) AS nodelist, COUNT(*) AS count
WHERE count > 1
CALL apoc.refactor.mergeNodes(nodelist) YIELD node
RETURN node
【备注】运行该代码时,出现报错:数据库实例中没有apoc.refactor.mergeNodes
——需要安装 APOC 的 jar 包。
There is no procedure with the name `apoc.refactor.mergeNodes` registered for this database instance. Please ensure you've spelled the procedure name correctly and that the procedure is properly deployed.
下载网址:官网or neo4j国内地址(官网太慢了!!!)——下载与自己neo4j对应版本的jar包。
【1】下载后放到neo4j的安装目录的plugings目录下面(我的是D:\software\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\plugins)
【2】修改neo4j.conf文件,在文件最后加上
(我的neo4j.conf在D:\software\neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5\conf)
dbms.security.procedures.unrestricted=algo.*
dbms.security.procedures.unrestricted=apoc.*
如下:
【3】重启neo4j服务
【4】可视化界面运行return apoc.version()
如上,则安装成功
【5】原本合并相同节点的Cypher语句便可以运行成功了。
【效果】
运行前:
运行后:
运行后,该标签节点状况:
LOAD CSV WITH HEADERS FROM "file:///student_school.csv" AS line
match (from:student{id:line.student_id}),(to:school {id:line.school_id})
merge (from)-[r:学校]->(to)#创建标签为学校的关系
merge (from)-[:rel]->(to)#创建标签为rel,属性为空值的关系
merge (from)-[:rel {
relation:line.辅导时间}]->(to)#创建标签为rel,属性由表格中‘辅导时间’赋值的的关系
1.neo4j不可以画无向图。
在创建就必须规定方向,并且只能是单向。(这是出于对查询效率的考虑)。如果关系的方向无关紧要,可以只建一个边,查询时不指定方向就可以了,即完全忽略关系的方向(MATCH (a)-[:relation]-(b)
查询结果会和下面两条语句执行并合并后的结果完全一致:
MATCH (a)-[:relation]->(b)
andMATCH (a)<-[:relation]-(b)
)
例如:
MATCH (n) RETURN n LIMIT 25
标签为school,属性id为1的节点
return (:school{id:'1'})--()
有向查询参考上文(五—*备注)
(2层关系)
match p=(n:teacher{teacher_name:"六六"})-[*..2]->() return p limit 50
MATCH (n) where id(n)=452644 return n
通过节点的id属性进行修改:
将id为452644的relation属性改为“亲友“
MATCH (r)
WHERE id(r) = 452644
SET r.relation = "亲友"
#标签为address的节点及其关系
MATCH (n:address)-[r]-() RETURN n,r
MATCH (n:address)-[r]-() DELETE n,r
MATCH (n:address) DELETE n
MATCH (n) where id(n)=452644 delete n
获取节点的关系名称:
此处为获取标签为teacher的节点的所有关系的名称。
MATCH (n:teacher)-[r]-() RETURN r,type(r)
指定要删除的具体的关系名,删除某一个关系。
此处为删除teacher节点的名称为rel的关系。
MATCH (n:teacher)-[r:rel]-() DELETE r
总结提前:
【1】先删关系,再删节点
【2】当记不得关系名时,type(r)
可以查到关系名
【3】彻底删除节点标签名,需要删除前期对该标签名建立的索引