【技巧分享】Neo4j快速入门(含案例)

随意更新,存档用
Update log:
2024-04-07 12:30: 更正部分不一致样例;新增结点C及相关查询;新增匿名及多关系查询;新增案例

环境配置

  1. Neo4j: 选择正确版本安装,并解压到本地
    https://neo4j.com/deployment-center/在这里插入图片描述

  2. Java: 安装合适版本Java,不能太低
    https://www.oracle.com/java/technologies/downloads/
    在这里插入图片描述

  3. 配置环境变量

    • 系统变量:
      • NEO4J_HOME: D:\Program Files\neo4j-community-X.X.0
      • JAVA_HOME: D:\Program Files\Java\jdk-XX
    • 路径变量Path:
      • %NEO4J_HOME%\bin
      • %JAVA_HOME%\bin
  4. 测试命令:

    • java -version,安装正确,会返回对应版本
    • neo4j console,安装正确会启动Neo4j,进入网址 http://localhost:7474,账号密码初始为Neo4j

常用命令

// # 增
// ## 新增结点n
CREATE (n:Person {name : 'Node A', age: 30});
CREATE (n:Person {name : 'Node B', age: 20});
CREATE (n:Person {name : 'Node C', age: 10});
// ## 新增关系r
MATCH (a:Person),(b:Person) WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[r:Follow]->(b);
MATCH (b:Person),(c:Person) WHERE b.name = 'Node B' AND c.name = 'Node C'
CREATE (b)-[r:Follow]->(c);
MATCH (a:Person),(c:Person) WHERE a.name = 'Node A' AND c.name = 'Node C'
CREATE (a)-[r:Follow]->(c);

// # 删
// ## 删除结点n
MATCH (n:Person { name:'Andres' }) DETACH DELETE n;
// ### 清库跑路
MATCH (n) DETACH DELETE n;
// ## 删除关系r
MATCH (a:Person)-[r:Follow]->(b:Person) WHERE a.name = 'Node A' AND b.name = 'Node B'
DELETE r;
  
// # 改
// ## 更改名字
MATCH (n:Person { name: 'Node A' }) SET n.name = 'Andres';
// ## 更改年龄 `on match set`,不存在则新增'create set`
MERGE (n:Person {name: 'Node C'}) ON CREATE SET n.age = 18
ON MATCH SET n.age = 17;

// # 查
// ## 查询结点
MATCH (n:Person) RETURN n LIMIT 25;
MATCH (:Person { name:'Andres' })-[r:Follow]->(person)
RETURN person.name;
// ## 查询关系
MATCH (a:Person { name:'Andres' })-[r]->(b:Person { name:'Node B' })
RETURN type(r);
// ## 查询最短路径
MATCH (bgn:Person { name:'Andres' }),(end:Person { name:'Node C' }),
  p = shortestPath((bgn)-[r:Follow*1..]-(end)) 
RETURN p;
// ## 其他:A关注的人所关注的人
MATCH ((a:Person  { name:'Andres' }-[:Follow] -> ()) <-[]-(person)
return person;
MATCH (:Person {name:'Andres' })-[:Follow*2]->(person)
return person;
// ## 其他:A关注的人及其关注的人所关注的人
MATCH (:Person {name:'Andres' })-[:Follow*1..2]->(person)
return person;

《Graph databases》 案例

Shakespeare

Cross-Domain Models

// # 新增结点及关系
CREATE 
    (billy:User {name:'Billy'}),
    (england:Country {name:'England'}),
    (greyStreet:Street {name:'Grey Street'}),
    (juliusCaesar:Play {title:'Julius Caesar'}),
    (newcastle:City {name:'Newcastle'}),
    (performance1:Performance {date:20120729}),
    (performance2:Performance {date:20061121}),
    (performance3:Performance {date:20120730}),
    (production1:Production {name:'Julius Caesar'}),
    (production2:Production {name:'The Tempest'}),
    (review:Review {rating:5, review:'This was awesome!'}),
    (rsc:Company {name:'RSC'}),
    (shakespeare:Author {firstname:'William',lastname:'Shakespeare'}),
    (stratford:City {name:'Stratford upon Avon'}),
    (theatreRoyal:Venue {name:'Theatre Royal'}),
    (theTempest:Play {title:'The Tempest'}),
    (tyneAndWear:County {name:'Tyne and Wear'}),
    (billy)-[:WROTE_REVIEW]->(review),
    (greyStreet)-[:CITY]->(newcastle),
    (newcastle)-[:COUNTY]->(tyneAndWear),
    (performance1)-[:PERFORMANCE_OF]->(production1),
    (performance1)-[:VENUE]->(theatreRoyal),
    (performance2)-[:PERFORMANCE_OF]->(production2),
    (performance2)-[:VENUE]->(theatreRoyal),
    (performance3)-[:PERFORMANCE_OF]->(production1),
    (performance3)-[:VENUE]->(theatreRoyal),
    (production1)-[:PRODUCTION_OF]->(juliusCaesar),
    (production2)-[:PRODUCTION_OF]->(theTempest),
    (review)-[:RATED]->(performance1),
    (rsc)-[:BASED_IN]->(stratford),
    (rsc)-[:PRODUCED]->(production1),
    (rsc)-[:PRODUCED]->(production2),
    (shakespeare)-[:BORN_IN]->(stratford),
    (shakespeare)-[:WROTE_PLAY {year:1599}]->(juliusCaesar),
    (shakespeare)-[:WROTE_PLAY {year:1610}]->(theTempest),
    (stratford)-[:COUNTRY]->(england),
    (theatreRoyal)-[:STREET]->(greyStreet),
    (tyneAndWear)-[:COUNTRY]->(england);

// # 复杂查询:在Newcastle的Theatre Royal(皇家剧院)演奏的关于Shakespeare1608年后相关作品的表演
MATCH (theater:Venue {name:'Theatre Royal'}),
      (newcastle:City {name:'Newcastle'}), 
      (bard:Author {lastname:'Shakespeare'}),
      (newcastle)<-[:STREET|CITY*1..2]-(theater)
        <-[:VENUE]-()-[:PERFORMANCE_OF]->()
        -[:PRODUCTION_OF]->(play)<-[w:WROTE_PLAY]-(bard)
WHERE w.year > 1608
RETURN DISTINCT play.title AS play;

// >>> play
// >>> "Julius Caesar"
// >>> "The Tempest"

// # 复杂查询:在Newcastle的Theatre Royal(皇家剧院)演奏的关于Shakespeare1608年后相关作品的表演统计
MATCH (theater:Venue {name:'Theatre Royal'}),
      (newcastle:City {name:'Newcastle'}), 
      (bard:Author {lastname:'Shakespeare'}),
      (newcastle)<-[:STREET|CITY*1..2]-(theater)
        <-[:VENUE]-()-[p:PERFORMANCE_OF]->()
        -[:PRODUCTION_OF]->(play)<-[WROTE_PLAY]-(bard)
RETURN play.title AS play, count(p) AS performance_count
ORDER BY performance_count DESC;

// >>> play				performance_count
// >>> "Julius Caesar"		2
// >>> "The Tempest"		1

// # WITH查询:Shakespeare的作品
MATCH (bard:Author {lastname:'Shakespeare'})-[w:WROTE_PLAY]->(play)
WITH play
ORDER BY w.year DESC
RETURN collect(play.title) AS plays;

// >>> plays
// >>> ["The Tempest", "Julius Caesar"]

Model in practice

Ian began employment as an engineer at Neo Technology

Figure 4-2

William Hartnell played The Doctor in the story The Sensorites

Figure 4-3

Ian emailed Jim, and copied in Alistair

Figure 4-4

Alistair wrote a review of a film, which was published in a magazine

Figure 4-5

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值