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
时间: 2024-10-21 01:23:37

Neo4j基本用法的相关文章

Neo4j的查询语法笔记(二)

cypher是neo4j官网提供的声明式查询语言,非常强大,用它可以完成任意的图谱里面的查询过滤,我们知识图谱的一期项目 基本开发完毕,后面会陆续总结学习一下neo4j相关的知识.今天接着上篇文章来看下neo4j的cpyher查询的一些基本概念和语法. 一,Node语法 在cypher里面通过用一对小括号()表示一个节点,它在cypher里面查询形式如下: 1,() 代表匹配任意一个节点 2, (node1) 代表匹配任意一个节点,并给它起了一个别名 3, (:Lable) 代表查询一个类型的数

neo4j 学习-2

Neo4j 查询例句 MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof) RETURN john.name, fof.name MATCH (user)-[:friend]->(follower) WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*' RETURN user.name, follower

图形数据库 Neo4j 开发实战

https://www.ibm.com/developerworks/cn/java/j-lo-neo4j/ Neo4j 是一个高性能的 NoSQL 图形数据库.Neo4j 使用图(graph)相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系.很多应用中数据之间的关系,可以很直接地使用图中节点和关系的概念来建模.对于这样的应用,使用 Neo4j 来存储数据会非常的自然,要优于使用关系数据库.本文对 Neo4j 进行了深入的介绍,并结合具体的实例来进行详细的说明,可以让您对 Ne

Neo4j数据库——Cypher语言初学

任何数据库基础的都是增删改查四种功能,而Neo4j使用的Cypher语言一样如此.Cypher是一种很好处理图数据库的语言,下面就从几个基本功能来学习他的基本用法.就以我们做的电影智能问答系统来做示范. 一 创建节点 创建节点有两种方式,一种是create方式,一种是用merge方式.其中用create创建是不管这个节点有没有都进行创建,而merge是如果节点存在则不再创建. 1 //merge方式,创建唯一节点 2 merge(n:教父) 3 4 //create方式,无论有没有都进行创建节点

spring boot 2.0 neo4j 使用

参考文档 官方文档 http://spring.io/projects/spring-data-neo4j#learn https://docs.spring.io/spring-data/neo4j/docs/5.1.2.RELEASE/reference/html/ https://neo4j.com/docs/ https://neo4j.com/docs/developer-manual/current/ 第三方使用文档 https://blog.csdn.net/appleyk/art

Neo4j图数据库从入门到精通

目录 第一章:介绍 Neo4j是什么 Neo4j的特点 Neo4j的优点 第二章:安装 1.环境 2.下载 3.开启远程访问 4.启动 第三章:CQL 1.CQL简介 2.Neo4j CQL命令/条款 3.Neo4j CQL 函数 4.Neo4j CQL数据类型 第四章:命令 1.CREATE创建 2.MATCH查询 3.RETURN返回 4.关系基础 5.WHERE子句 6.DELETE删除 7.REMOVE删除 8.SET子句 9.ORDER BY排序 10.UNION子句 11.LIMIT

【Neo4j查询优化系列】如何快速统计节点的关系数

在图数据库中我们经常需要统计节点上的关系数目.一种常见的查询写法是这样的: MATCH (n:Person {name:'Keanu Reeves'})-[]-() RETURN count(*); 上面的查询会返回代表基诺-李维斯的节点(节点标签为Person)上所有关系的总数,包括进入的和流出的关系.如果用PROFILE来看一下查询的执行步骤和成本,结果如下: 我们看到在统计节点拥有的关系数目时,产生8次dbhits,以及执行count()产生的EagerAggregation操作.查询结果

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e