最近使用nosql数据库neo4j,针对其综合查询学习使用了cypher语句。
分享总结:
1.根据索引为nePort,针对id模糊查询全部节点。根据id排序,limit只去前10条记录
start n = node:nePort('id:*')
match (x)-[:NE_PORT]->(n)
return n,x
order by n.id limit 10
2.这个查询相对于1查询,中多了,match匹配节点间关系,先根据索引查询获取,起点n,在匹配关系,【:关系名称】,a->b 表示从a到b.
该查询,是获取存在一个节点关系志向n,且关系为NE_PORT,这个起点x
start n = node:nePort('id:*')
match (x)-[:NE_PORT]->n
return n.type,n.id,n.speedId,n.code,n.name,n.optical,n.used,n.serial,x.id
order by n.id skip 0 limit 10;
3模糊查询节点id属性中包含11的,的节点。
START ne=node:ne('id=*11*') return ne
4.匹配下级所有[:VC*]
START ne=node(4106557) MACTH ne-[:NE_PORT]->port-[:VC*]-vc where vc.vtag=0 RETURN vc;
5.只匹配到,2层关系为VC的节点。
START ne=node(4106557) MATCH ne-[:NE_PORT]->port-[:VC*1..2]->vc WITH vc WHERE vc.vtag? = 0 RETURN vc;
6.条件,模糊查询。查询 label 含中山的网元
start n=node(3) match n-[:NE]-ne where ne.label =~ '.*中山.*' return ne.id, ne.label, ne.name;
查询语法(Cyphe Query Language)
neo4j自己基于图论的搜索算法,实现了一套查询语言解析,提供了一些常见的聚合函数(max,sum,min,count等)。
Ø START:在图中的开始点,通过元素的ID或所以查找获得。
Ø MATCH:图形的匹配模式,束缚于开始点。
Ø WHERE:过滤条件。
Ø RETURN:返回所需要的。
语法例子:
Join查询:
start n=(1) match (n)-[:BLOCKS]->(x) return x
Where条件:
start n=(2, 1) where (n.age < 30 and n.name = "Tobias") or not(n.name = "Tobias") return n
聚合函数:
start n=(2,3,4) return avg(n.property)
Order:
start n=(1,2,3) return n order by n.name DESC
分页:
start n=(1,2,3,4,5) return n order by n.name skip 1 limit 2
START n=node(*) return n skip 1 limit 2
统计:
START n=node(*) RETURN count(*);
START n=node(*) RETURN "Hello Graph with "+count(*)+" Nodes!" as welcome;
start n = node:nePort('id:*') return n skip " + pageNo + " limit " + pageSize;
如下是在JAVA中使用参数的几个例子:
节点ID参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "id", 0 );
ExecutionResult result =
engine.execute("start n=node({id}) return n.name", params );
节点对象参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "node", andreasNode );
ExecutionResult result =
engine.execute("start n=node({node}) return n.name", params );
多节点ID参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "id", Arrays.asList( 0, 1, 2 ) );
ExecutionResult result =
engine.execute("start n=node({id}) return n.name", params );
字符串参数
1
2
3
4
Map<String, Object> params = new HashMap<String, Object>();
params.put( "name", "Johan" );
ExecutionResult result =
engine.execute("start n=node(0,1,2) where n.name = {name} return n", params );
索引键值参数
1
2
3
4
5
Map<String, Object> params = new HashMap<String, Object>();
params.put( "key", "name" );
params.put( "value", "Michaela" );
ExecutionResult result =
engine.execute("start n=node:people({key} = {value}) return n", params );
索引查询参数
1
2
3
Map<String, Object> params = new HashMap<String, Object>();
params.put( "query", "name:Andreas" );
ExecutionResult result =
engine.execute("start n=node:people({query}) return n", params );
SKIP和LIMIT的数字参数
1
2
3
4
5
Map<String, Object> params = new HashMap<String, Object>();
params.put( "s", 1 );
params.put( "l", 1 );
ExecutionResult result =
engine.execute("start n=node(0,1,2) return n.name skip {s} limit {l}", params );
正则表达式参数
1
2
3
4
Map<String, Object> params = new HashMap<String, Object>();
params.put( "regex", ".*h.*" );
ExecutionResult result =
engine.execute("start n=node(0,1,2) where n.name =~ {regex} return n.name"
通过索引查询获取节点
如果开始节点可以通过索引查询得到,可以如此来写:
node:index-name(key=”value”)。在此列子中存在一个节点索引叫nodes。
查询:
START n=node:nodes(name = "A")
RETURN n
索引中命名为A的节点将被返回。
结果:
调用例子:
db = new ImpermanentGraphDatabase();
engine = new ExecutionEngine( db );
CypherParser parser = new CypherParser();
ExecutionEngine engine = new ExecutionEngine(db);
Query query = parser.parse( "start n=(0) where 1=1 return n" );
ExecutionResult result = engine.execute( query );
assertThat( result.columns(), hasItem( "n" ) );
Iterator<Node> n_column = result.columnAs( "n" );
assertThat( asIterable( n_column ), hasItem(db.getNodeById(0)) );
assertThat( result.toString(), containsString("Node[0]") );
分享到:
相关推荐
在语法部分,你可以学习到Cypher查询语法,包括节点匹配、关系查找、属性匹配和返回语句等。 子句部分提供了Cypher查询子句的参考,例如MATCH子句用于查找符合特定模式的节点和关系,RETURN子句用于指定查询返回的...
Neo4j使用了一种名为Cypher的声明式图查询语言,这种语言是专门为图形数据库设计的,它使得用户可以高效地对图形进行查询和更新。Neo4j是原生的图形数据库,意味着其数据模型与图数据模型是同构的,这使得Neo4j能够...
│ Neo4J(Cypher语句)学习 - 赵晓雷的专栏 - CSDN博客.html │ Neo4j_事务&深度遍历.html │ neo4j中的分组查询.html │ Neo4j之Cypher学习总结.html │ NEO4J亿级数据导入导出以及数据更新 - 耶和华靠近伤心的...
### Cypher查询语句结构 - `MATCH`:用于定义需要匹配的图形模式,包括节点和关系。 - `WHERE`:用于添加过滤条件,只有满足条件的模式才会被考虑。 - `RETURN`:指定查询结果中应该返回的内容。 - `ORDER BY`:...
在本文中,我们将详细介绍Neo4j的CQL语句语法,包括创建节点、关系、属性、查询、删除、修改等操作。 创建节点 在Neo4j中,创建节点使用CREATE语句,基本语法为: ``` CREATE (n:Label {key: value, ...}) ``` ...
模型-输出" 与标题相呼应,暗示这个插件是Kettle(Pentaho Data Integration,也被称为水壶)的一部分,它提供了一个模型化的接口,使用户能够通过定义Cypher语句并传递参数,将数据流中的信息有效地写入Neo4j数据库...
Neo4j是一款强大的图形数据库系统,其核心查询语言是Cypher。Cypher设计用于简洁、直观地处理图形数据,尤其适合于数据建模、查询和更新。本手册,"Neo4j Cypher Manual v4.1",是针对Neo4j 4.1版本的官方文档,它...
Neo4j Cypher查询格式化程序 当我刚开始使用Neo4j和Cypher时,我总体上很喜欢这种语法-但是我看不到任何简单易用的在线查询格式化程序-因此是这个项目。 它使用原始正则表达式方法进行未格式化的Cypher查询,并返回...
Cypher 是 Neo4j 提供的一种声明式查询语言,用于高效地检索和更新图数据。它使用图形模式匹配作为主要机制来处理图形数据的选择。Cypher 的语法直观易懂,支持创建、读取、更新和删除操作。 #### 四、Cypher 基本...
**Neo4j Cypher语言是图数据库 Neo4j 的核心查询语言**,它设计得简洁易读,使得处理复杂的图数据变得直观而高效。Cypher 语法类似于 SQL,但更侧重于图形操作,如节点、关系和属性的操作。在腾讯课堂上的 Neo4j ...
【标题】"neo4j-graphql-java"是一个用于在Java虚拟机(JVM)环境中将GraphQL查询和突变转换为Neo4j Cypher语句的库。它旨在提供一种高效且无缝的方式,使得开发人员能够利用GraphQL的强大功能来操作图数据库——...
- **Cypher查询**:通过Neo4j Browser或编程接口执行Cypher语句,进行数据增删改查。 - **驱动程序**:Neo4j提供了多种编程语言的驱动程序,如Java、Python、JavaScript等,方便集成到应用中。 - **图数据建模**...
- **SQL 类似查询**: 提供类似于 SQL 的查询语言 CQL (Cypher Query Language),简化了数据查询的复杂度。 - **属性图模型**: 基于属性图数据模型进行数据存储,能够直观地表示复杂的关系。 - **索引支持**: 使用 ...
cycli, Cypher的命令行 接口 Neo4j cycli 一种面向 Neo4j的查询语言的命令行接口。 安装如果你还没有,下载并安装 Neo4j 。 然后,安装 cycli:$ pip install cycli启动首先,从终端执行 cycl
首先,批量数据导入涉及到的主要概念是Cypher语句,这是Neo4j用于操作数据的SQL-like语言。批量导入时,可以编写Cypher脚本一次性创建大量节点和关系。例如,如果你有一个CSV文件,你可以使用LOAD CSV语句将数据加载...
2. 查询引擎:系统应包含一个智能查询引擎,它根据用户输入的问题,使用Cypher查询语句在图谱中寻找最匹配的答案。可能涉及到路径搜索、节点属性匹配等多种策略。 3. 用户接口:提供一个用户友好的界面,允许用户...
2. Cypher查询解析器:将Cypher语句转化为执行计划。 3. 执行引擎:执行查询计划,涉及遍历图、过滤、聚合等功能。 4. 集群与分布式支持:在多节点环境中提供高可用性和一致性。 二、源码关键模块 1. 数据模型:...
例如,查询朋友关系的Cypher语句可以是: ``` MATCH (me {name: "Alice"})-[:KNOWS]->(friend) RETURN friend.name ``` 这个语句匹配名为Alice的节点,找到所有从Alice出发的KNOWS关系,并返回这些关系另一端的...
通过分析"Neo4jJavaDriverExamples"中的代码,你可以学习到如何有效地在Java应用程序中集成Neo4j,执行Cypher查询,管理事务,以及处理查询结果。同时,这些示例也将帮助你理解如何处理可能出现的异常情况,优化性能...
通过学习Neo4j官方手册,用户可以掌握如何使用Neo4j进行数据存储、查询和图遍历,并能利用Cypher语言编写高效的查询语句,以应对复杂的数据关系和模式匹配需求。对于初学者而言,熟悉E-R图(实体-关系图)可以帮助...