Neo4j 教程转载

Neo4j 基础教程 



Neo4j 第一篇:在Windows环境中安装Neo4j

一. 安装Neo4j 前,需要安装 JDK

二. 配置Neo4j 

        访问协议有: Bolt(7687) , HTTP(7474) , HTTPS(7473)

        默认只允许本地访问,如果需要允许远程主机访问,需要设置这个属性为 0.0.0.0,且设置防火墙允许对应端口访问:

 dbms.connectors.default_listen_address=0.0.0.0

三. 启动Neo4j

    启动命令:neo4j.bat console

    启动服务,停止服务,重启服务和查询服务的状态:

bin\neo4j start

bin\neo4j stop

bin\neo4j restart

bin\neo4j status


四. Neo4j 集成浏览器

    浏览器打开  “http://localhost:7474/” 默认的用户是neo4j,默认的密码是:neo4j,第一次成功connect到Neo4j服务器之后,需要重置密码。

    



Neo4j 第二篇:图形数据库

图的基本概念:一个属性图是有向图,由顶点(Vertex),边(Edge),标签(Lable),关系类型(Relationship Type)和属性(Property)组成。

一. 基本概念

实体(Entity)是指节点(Node)和关系(Relationship);

路径(Path)是指由起始节点和终止节点之间的实体(节点和关系)构成的有序组合;

标记(Token)是非空的字符串,用于表示 标签(Lable)、关系类型(Relationship Type)、或属性键(Property Key);

    标签(Label):用于对节点进行分组,多个节点可以有相同的标签,一个节点可以有多个标签,拥有相同标签的节点属于同一个分组;

    关系类型(Relationship Type):用于表示关系的类型,多个关系可以有相同的关系类型,但是一个关系仅有一个关系类型;

    属性键:用于唯一标识一个属性,在一个关系或节点中,属性键是唯一的;

属性(Property)是一个键值对(Key/Value Pair),每个节点或关系可以有一个或多个属性;属性值可以是标量类型(Boolean、Integer、Float、String)、或组合类型(List,Map);



Neo4j 第三篇:Cypher查询入门

一. 基本知识

     和SQL很相似,Cypher语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。

    1. 变量(区分大小写)

      如:【 MATCH (n)-->(b)  RETURN b 】 n , b 就是变量

     2. 访问属性

        格式是:Variable.PropertyKey

        match (n)-->(b) where id(n)=5 and b.age=18 return b;


二. 创建节点

    节点模式的构成:(Variable:Lable1:Lable2{Key1:Value1,Key2,Value2})

    如:【create (n:Person { name:'Tom Hanks', born:1956})returnn;】

三. 查询节点

    通过match子句查询数据库

    1. 查询整个图形数据库

        match(n) returnn;

    2. 根据属性查询

        match(n) where n.born < 1955 return n;

    3. 查询具有指定Lable的节点

        match(n:Movie)  return n;

    4. 查询具有指定属性的节点

    match(n{name:'Tom Hanks'})  return n;


四. 创建关系

    关系的构成:StartNode - [Variable:RelationshipType{Key1:Value1,Key2:Value2}] -> EndNode,在创建关系时,必须指定关系类型。

    1,创建没有任何属性的关系

        MATCH (a:Person),(b:Movie) 

        WHERE a.name ='Robert Zemeckis' AND b.title ='Forrest Gump'CREATE (a) -[r:DIRECTED]-> (b) 

        RETURN r;

    2,创建关系,并设置关系的属性

        MATCH (a:Person),(b:Movie)

WHERE a.name ='Tom Hanks'AND b.title ='Forrest Gump'CREATE (a)-[r:ACTED_IN { roles:['Forrest'] }]->(b)

RETURN r;


五. 查询关系

    在Cypher中,关系分为三种:符号“--”,表示有关系,忽略关系的类型和方向;符号“-->”和“<--”,表示有方向的关系;

1,查询整个数据图形

    match(n) return n;

2,查询跟指定节点有关系的节点

    match(n) -- (m:Movice)

    return n;

3,查询有向关系的节点

    MATCH (:Person { name:'Tom Hanks'})-->(movie)

    RETURN movie;

4,为关系命名,通过[r]为关系定义一个变量名,通过函数type获取关系的类型

    MATCH (:Person { name:'Tom Hanks'})-[r]->(movie)

    RETURN r,type(r);


5. 询特定的关系类型,通过[Variable:RelationshipType{Key:Value}]指定关系的类型和属性

    MATCH (:Person { name:'Tom Hanks'})-[r:ACTED_IN{roles:'Forrest'}]->(movie)

    RETURN r,type(r);


六. 更新图形

    1,创建一个完整的Path

    CREATE p =(vic:Worker:Person{ name:'vic',title:"Developer"})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael:Worker:Person { name:'Michael',title:"Manager" })

    RETURN p

2,为节点增加属性

    match (n) 

    where id(n)=7

    set n.name ='neo'

    return n;

3,为节点增加标签

    match (n)

    where id(n)=7

    set n:Company

    return n;

    4,为关系增加属性

    match (n)<-[r]-(m)

    where id(n)=7 and id(m)=8 

    se tr.team='Azure'

    return n;


七. 跟实体相关的函数

    1,通过id函数,返回节点或关系的ID

    MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)

    RETURN id(r);

    2,通过type函数,查询关系的类型

MATCH (:Person { name:'Oliver Stone'})-[r]->(movie)

RETURN type(r);

3,通过lables函数,查询节点的标签

MATCH (:Person { name:'Oliver Stone'})-[r]->(movie)

RETURN lables(movie);

4,通过keys函数,查看节点或关系的属性键

MATCH (a)

WHERE a.name ='Alice'RETURN keys(a)

5,通过properties()函数,查看节点或关系的属性

CREATE (p:Person { name:'Stefan', city:'Berlin' })

RETURN properties(p)

八.    路径查询

    变长路径的模式

从一个节点,通过直接关系,连接到另外一个节点,这个过程叫遍历,经过的节点和关系的组合叫做路径(Path),路径是由节点和关系的有序组合。

(a)-->(b):是步长为1的路径,节点a和b之间有关系直接关联;

(a)-->()-->(b):是步长为2的路径,从节点a,经过两个关系和一个节点,到达节点b;

Cypher语言支持变长路径的模式,变长路径的表示方式是:[*N..M],N和M表示路径长度的最小值和最大值。

(a)-[*2]->(b):表示路径长度为2,起始节点是a,终止节点是b;

(a)-[*3..5]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;

(a)-[*..5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;

(a)-[*3..]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;

(a)-[*]->(b):表示不限制路径长度,起始节点是a,终止节点是b;

路径变量

路径可以指定(assign)给一个变量,该变量是路径变量,用于引用查询路径。

p = (a)-[*3..5]->(b)

例子:

MATCH (me)-[:KNOWS*1..2]-(remote_friend)

WHERE me.name = 'Filipa'

RETURN remote_friend.name



Neo4j 第四篇:使用.NET驱动访问Neo4j



Neo4j 第五篇:批量更新数据



Neo4j 第六篇:Cypher语法



Neo4j 第七篇:模式(Pattern)

关系匹配



Neo4j 第八篇:投射和过滤

一,Return子句

二,with 子句

三,unwind子句

四,Where子句

五,排序

六,SKIP和LIMIT



Neo4j 第九篇:查询数据(Match)

一,节点查询

    match 的基本使用

二,基本关系的查询

        1,指定关系的方向来查询节点

        2,查询关系的类型

        3,匹配关系类型

        3,匹配多种关系类型

        4,匹配关系类型,并指定关系变量

        5,匹配多个关系

三,匹配路径

    1,对变长路径的查询

    2,路径变量 

    3,根据路径的属性进行匹配


Neo4j 第十篇:更新数据

一,创建节点

1,创建空的节点  

  CREATE (n)

    CREATE (a),(b)

2,创建带标签的节点

CREATE (n:Person)

CREATE (n:Person:Swedish)

3,创建带标签和属性的节点

CREATE (n:Person { name:'Andres', title:'Developer'})


二,创建关系

创建节点之前的关系

1,在两个节点之间创建关系

在两个节点之间创建关系,并设置关系类型

MATCH (a:Person),(b:Person)

WHERE a.name ='A'AND b.name ='B'CREATE (a)-[r:RELTYPE]->(b)

RETURN type(r)

2,创建关系,并设置关系的属性

MATCH (a:Person),(b:Person)

WHERE a.name ='A'AND b.name ='B'CREATE (a)-[r:RELTYPE { name: a.name +'<->'+ b.name }]->(b)

RETURN type(r), r.name

3,CREATE子句和模式

在CREATE子句和模式中,对于模式中的任意部分,如果它不存在于图中,那么CREATE子句创建它;如果存在于图中,那么就会引用它。

CREATE p =(andres { name:'Andres'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael { name:'Michael' })

RETURN p

三,删除节点和关系

使用delete子句删除节点、关系和路径,当删除节点时,该节点必须是孤立的节点,也就是说,必须首先删除跟节点相关的所有关系。

detach delete: 表示删除一个节点或多个节点,跟节点相关的所有关系也都被删除。

1,删除节点

MATCH (n:Person { name:'UNKNOWN' })

DELETE n

2,删除所有节点和关系

MATCH (n)

DETACH DELETE n

3,删除一个节点和它的所有关系

MATCH (n { name:'Andres' })

DETACH DELETE n

4,删除关系

MATCH (n { name:'Andres'})-[r:KNOWS]->()

DELETE r

四,更新属性或标签

set子句用于更新节点的标签,向节点和关系中添加属性

1,向节点或关系中添加属性

MATCH (n { name:'Andres' })

SET n.surname ='Taylor'RETURN n.name, n.surname

2,移除属性

如果设置属性的值是NULL,相当于把该属性从节点或关系中移除

MATCH (n { name:'Andres' })

SET n.name = NULL RETURN n.name, n.age

3,复制属性

把一个节点的属性复制给另一个节点

MATCH (at { name:'Andres'}),(pn { name:'Peter' })

SET at = pn

RETURN at.name, at.age, at.hungry, pn.name, pn.age

4,从Map中添加属性

MATCH (p { name:'Peter' })

SET p += { hungry: TRUE , position:'Entrepreneur'}

5,在一条set子句中添加多个属性

MATCH (n { name:'Andres' })

SET n.position ='Developer', n.surname ='Taylor'

6,向节点中添加标签

MATCH (n { name:'Stefan' })

SET n:German

RETURN n.name, labels(n) AS labels

7,向节点中添加多个标签

MATCH (n { name:'Emil' })

SET n:Swedish:Bossman

RETURN n.name, labels(n) AS labels

五,移除属性

使用remove子句从节点中移除标签和属性,从关系中移除属性。

1,移除属性

默认情况下,Neo4j不允许存在值为null的属性;如果属性不存在,那么返回该属性的值是null。

MATCH (a { name:'Andres' })

REMOVE a.age

RETURN a.name, a.age

2,移除节点的标签

MATCH (n { name:'Peter' })

REMOVE n:German

RETURN n.name, labels(n)

3,移除节点的多个标签

当节点的标签为空时,labels(n)函数返回空的list

MATCH (n { name:'Peter' })

REMOVE n:German:Swedish

RETURN n.name, labels(n)

六,foreach子句

列表和路径是Cypher中的关键概念,foreach子句用于更新数据,例如,对路径中的元素或通过聚合创建的列表执行更新命令。

1,对路径中的元素执行更新命令

对路径中匹配的所有节点,添加marked属性,并设置属性值为TRUE

MATCH p =(begin)-[*]->(END )

WHERE begin.name = 'A' AND END .name = 'D'

FOREACH (n IN nodes(p)| SET n.marked = TRUE )




Neo4j 第十一篇:Cypher函数



Neo4j 第十二篇:使用Python驱动访问Neo4j

你可能感兴趣的:(Neo4j 教程转载)