Neo4j基本用法

Cypher提供了一个方便的方法去表示查询和其他的neo4j行为,Cypher不仅可以完成工作,也可以在产品中有足够快的速度。也可以 基于java语言来处理查询用例,使用java API可以自定义遍历方法。

Cypher语言进行查询的步骤为:语法分析和验证查询,生成执行方案,定位初始节点,选择和遍历关系,改变或者返回结果。在图数据库中进行强力搜索是非常消耗时间的,最好有一初始节点,或者有相应的索引。

在图数据库中,有联系的节点以及联系所组成的模式(pattern)是最有价值的东西,提供了最多的信息。Cypher语言正是基于模式的语言,可以非常直观的表达模式。

Cypher基本语法

节点语法:(),(matrix),(:movie),(matrix:Movie{title:“the matix”,released:1997})

关系语法: -[role:ACTED_IN{roles:[“neo”]}]->

模式语法:(:people)-[:like]->(:people)

模式可以赋值给标示符:like=(:people)-[:like]->(:people)

在模式中使用的节点表示数据库中0到多个物理节点,关系代表数据库中的零到多个关系,模式表示0到多个路径。

Cypher子句

Create子句:创建新的节点,关系,模式

CREATE (a:Person { name:"Tom Hanks",   born:1956 })-[r:ACTED_IN { roles: ["Forrest"]}]->(m:Movie { title:"Forrest Gump",released:1994 })

CREATE (d:Person { name:"Robert Zemeckis", born:1951 })-[:DIRECTED]->(m) RETURN a,d,r,m

Match子句:类似于查找

MATCH (p:Person { name:"Keanu Reeves" }) RETURN p
MATCH (p:Person { name:"Tom Hanks" })-[r:ACTED_IN]->(m:Movie)
RETURN m.title, r.roles

组合子句:

MATCH (p:Person { name:"Tom Hanks" })

CREATE (m:Movie { title:"Cloud Atlas",released:2012 })

CREATE (p)-[r:ACTED_IN { roles: ['Zachry']}]->(m)

RETURN p,r,m

Merge子句:结合了create和match子句的功能,首先查找是否有符合模式的节点或者路径,如果没有符合模式条件的结果,则创建符合模式的节点或者路劲。同时提供了on create子句,可以在创建节点或者关系的情况下执行特定的操作。Merge子句

MERGE (m:Movie { title:"Cloud Atlas" })

ON CREATE SET m.released = 2012

RETURN m

MATCH (m:Movie { title:"Cloud Atlas" })

MATCH (p:Person { name:"Tom Hanks" })

MERGE (p)-[r:ACTED_IN]->(m)

ON CREATE SET r.roles =['Zachry']

RETURN p,r,m

获取想要的结果

过滤结果:where子句

MATCH (m:Movie)

WHERE m.title = "The Matrix"

RETURN m

//等价用法

MATCH (m:Movie { title: "The Matrix" })
RETURN m
//返回没有导演过电影的演员及其所演过的电影
MATCH (p:Person)-[:ACTED_IN]->(m)
WHERE NOT (p)-[:DIRECTED]->()     //没有导演过电影的人才满足
RETURN p,m

在结果中使用表达式:组织返回的结果的形式

MATCH (p:Person) 
RETURN p, p.name AS name, upper(p.name), coalesce(p.nickname,"n/a") AS nickname, { name: p.name,   label:head(labels(p))} AS person

聚合数据:对返回的结果进行统计

//统计演员和导演合作的次数
MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)<-[:DIRECTED]-(director:Person) 
RETURN actor,director,count(*) AS collaborations

排序

MATCH (a:Person)-[:ACTED_IN]->(m:Movie) 
RETURN a,count(*) AS appearances 
ORDER BY appearances DESC LIMIT 10;

混合子句:union

MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) RETURN p,type(r) AS rel,m
UNION 
MATCH (p:Person)-[r:DIRECTED]->(m:Movie) RETURN p,type(r) AS rel,m

标签,约束和索引

标签在图数据库中可以用来组织节点。它们也被用来限定查询,定义约束和建立索引。

CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.title IS UNIQUE
posted @ 2015-09-04 20:56  libs5510  阅读(569)  评论(0编辑  收藏  举报