1.安装以及启动
Neo4J作为图数据库标准的一个实现,其功能还是非常强大的功能,并支持Cypher查询。目前其提供了3种版本:
- 桌面版
- 社区版
- 企业版
Neo4J其实现是基于Java实现的,所以JDK的安装是必须的,启动的方式官方文档有具体说明,笔者不在赘述,但是需要值得的一提的在windows的操作系统上通过PowerShell启动,其需要admin的管理员权限,但是并不是所有的电脑都有管理员权限,但是有Java的权限,
假设你的neo4j的安装包是放在
D:\neo4j-community-5.1.0
这个时候可以通过下面的命令进行启动。
java.exe -cp D:\neo4j-community-5.1.0\plugins\*;D:\neo4j-community-5.1.0\conf\*;D:\neo4j-community-5.1.0\lib\* -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:+UnlockExperimentalVMOptions -XX:+TrustFinalNonStaticFields -XX:+DisableExplicitGC -Djdk.nio.maxCachedBufferSize=1024 -Dio.netty.tryReflectionSetAccessible=true -Djdk.tls.ephemeralDHKeySize=2048 -Djdk.tls.rejectClientInitiatedRenegotiation=true -XX:FlightRecorderOptions=stackdepth=256 -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED -Dlog4j2.disable.jmx=true -Dfile.encoding=UTF-8 org.neo4j.server.CommunityEntryPoint --home-dir=D:\neo4j-community-5.1.0 --config-dir=D:\neo4j-community-5.1.0\conf --console-mode
2. Neo4J Cypher语法的常见例子
假设举一个例子,在《猫和老鼠》的动画片里面,Tom[猫] 追赶Jerry[老鼠]; Jerry[老鼠]也追赶Tom[猫]。
其语法如下:
1.1 创建关系和节点,会重复创建
create (tom:Cartoon{name:"Tom"}) -[:RUN_AFTER] -> (jerry:Cartoon{name:"Jerry"})
1.2 创建关系和节点,不会重复创建
merge (tom:Cartoon{name:"Tom"}) -[:RUN_AFTER] -> (jerry:Cartoon{name:"Jerry"})
- 删除某个节点以及其所有的关系
match(p:Cartoon) detach delete p
- 只删除关系
MATCH p=()-[r:RUN_AFTER]->() delete r return r
- 只删除节点
match(p:Cartoon) delete p
- 查询节点和关系
match(p:Cartoon) return p
- 增加双向关系
create (tom:Cartoon{name:"Tom"}) -[:RUN_AFTER] -> (jerry:Cartoon{name:"Jerry"})
create (jerry) -[:RUN_AFTER] -> (tom)
return tom,jerry
merge(tom:Cartoon{name:"Tom"}) -[:RUN_AFTER] -> (jerry:Cartoon{name:"Jerry"})
merge(jerry) -[:RUN_AFTER] -> (tom)
return tom,jerry
create (tom:Cartoon{firstName:"Tom", lastName:"Montague", age:13}) -
[:RUN_AFTER {since:"a long time ago", till:"forever", where:"verona"}] -> (jerry:Teen:Cartoon{firstName:"Jerry",lastName:"Capulet", age:13})
create (jerry) -[:RUN_AFTER] -> (tom)
return tom,jerry
create (tom:Cartoon{name:"Tom", lastName:"Montague", age:13}) -
[:RUN_AFTER {since:"a long time ago", till:"forever", where:"verona"}] -> (jerry:Teen:Cartoon{name:"Jerry",lastName:"Capulet", age:13})
create (jerry) -[:RUN_AFTER] -> (tom)
return tom,jerry
merge(tom:Cartoon{name:"Tom", lastName:"Montague", age:13}) -
[:RUN_AFTER {since:"a long time ago", till:"forever", where:"verona"}] -> (jerry:Teen:Cartoon{name:"Jerry",lastName:"Capulet", age:13})
create (jerry) -[:RUN_AFTER] -> (tom)
return tom,jerry
7.读取数据: 函数,ASC,SKIP,LIMIT不区分大小写,但是Label区分大小写
match(n:Cartoon) where n.name='Jerry' or n.firstName='Tom' return n
match(n:Cartoon) where toLower(n.name)='jerry' return n order by n.age ASC SKIP 2 LIMIT 5
match(n:Cartoon) where toLower(n.name)='jerry' return n order by n.age asc
8.关系查询带方向
match(p:Cartoon) - [l:RUN_AFTER] - () return r
9.更新数据
match(p:Cartoon{name:"Jerry"}) where p.age=13 set p.age=14
match(p:Cartoon) set p.age=p.age+1 return p
match(p:Cartoon) where p.age>=14 AND p.age<18 set p.age=p.age+1 return p
match(p:Cartoon)
where p.age>=14 AND p.age<18 AND p.name IS NOT NULL
set p.smell='teenSpirit'
set p.environment="dev"
return p
10.删除所有关系和节点
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
3. 从CSV文件导入到Neo4j的语法如下
Neo4J默认提供了剧本的例子,从CSV导入neo4j的语法如下:
LOAD CSV WITH HEADERS FROM "https://data.neo4j.com/northwind/products.csv" AS row
CREATE (n:Product)
SET n = row,
n.unitPrice = toFloat(row.unitPrice),
n.unitsInStock = toInteger(row.unitsInStock), n.unitsOnOrder = toInteger(row.unitsOnOrder),
n.reorderLevel = toInteger(row.reorderLevel), n.discontinued = (row.discontinued <> "0")
需要注意的是,如果是直接从本地文件导入,则需要把"https://data.neo4j.com/northwind/products.csv" 换成 “files:///products.csv”
同时把products.csv文件放入到D:\neo4j-community-5.1.0\conf\import 目录下。
4. 总结
今天的总结就到此为止,如果大家有兴趣,可以点赞或者收藏;当点赞或者收藏的次数大于5以后,说明此专题很受大家欢迎,我将会在补充和整理形成一系列文章.
其他博客推荐
https://blog.csdn.net/alex_xfboy/article/details/82970127?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1-82970127-blog-128069525.pc_relevant_vip_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1-82970127-blog-128069525.pc_relevant_vip_default&utm_relevant_index=1#t27