`
weitao1026
  • 浏览: 1048568 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

neo4j 查询cypher语句
最近使用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]") );

分享到:
评论

相关推荐

    neo4j-cypher-manual-4.0.pdf

    Neo4j是一种图形数据库,它使用Cypher查询语言进行数据的查询、更新和管理。Cypher是一种声明性的图形查询语言,它允许用户对图形进行表达式丰富且高效的查询、更新和管理。Cypher的设计既适合开发者,也适合运营...

    neo4j-cypher-manual-3.5

    neo4j-cypher-manual-3.5 Cypher is a declarative graph query language that allows for expressive and efficient querying and updating of the graph. It is designed to be suitable for both developers and ...

    neo4j cypher帮助文档

    学习Cypher查询的语法是使用Neo4j的第一步。了解如何声明变量、使用模式匹配、过滤结果以及如何对结果进行排序是基础。Cypher的语法规则设计得非常直观,使得即使是初次接触图数据库的用户也能快速上手。 #### 2. ...

    Neo4j-Cypher-Quick-Reference

    **Neo4j-Cypher-Quick-Reference** 是一套针对新手的快速入门参考资料,它主要聚焦于使用 **Cypher** 查询语言在 **Neo4j** 图数据库中的操作。Cypher 是一种声明式图形查询语言,设计简洁易读,非常适合处理复杂的...

    neo4j-cypher-refcard-2.1.4

    - Cypher语法允许在查询中直接使用字面量(Literal),对于临时的Cypher查询而言,这是适用的做法。然而,对于应用程序的最优实践是使用参数化查询,这里以`{value}`作为示例。 - Neo4j属性可以是字符串、数字、...

    kettle-neo4j-cypher-output:使用带有参数的Cypher将数据输出到Neo4j

    标题 "kettle-neo4j-cypher-output" 指的是一个Kettle插件,该插件专门设计用于将数据从Kettle转换流程中输出到Neo4j图形数据库,利用Cypher查询语言来创建、更新或操作节点和关系。Cypher是Neo4j所采用的声明式图形...

    neo4j学习资料汇总(各种优质博文和neo4j教程整理)

    │ Neo4j 第三篇:Cypher查询入门 - 悦光阴 - 博客园.html │ Neo4j 第二篇:图形数据库 - 悦光阴 - 博客园.html │ Neo4j 第五篇:批量更新数据 - 悦光阴 - 博客园.html │ Neo4j 第四篇:使用C更新和查询Neo4j...

    neo4j-cypher-manual-4.1.pdf

    10. **Cypher风格指南**:提供了编写清晰、可维护的Cypher查询的最佳实践,包括命名约定、注释规则和代码组织。 总的来说,"Neo4j Cypher Manual v4.1"是一个全面的学习资源,涵盖了从基础到高级的所有Cypher知识,...

    neo4j cypher manual docment

    This is the Cypher manual for Neo4j version 3.5, authored by the Neo4j Team. This manual covers the following areas: • Introduction — Introducing the Cypher query language. • Syntax — Learn ...

    cypher-query-formatter:Neo4j的Cypher查询语言的基于JS的简单格式化程序

    Neo4j Cypher查询格式化程序 当我刚开始使用Neo4j和Cypher时,我总体上很喜欢这种语法-但是我看不到任何简单易用的在线查询格式化程序-因此是这个项目。 它使用原始正则表达式方法进行未格式化的Cypher查询,并返回...

    Neo4j-Cypher-Quick-Reference-v2018-PART-1.pdf

    5. **Cypher图查询语言**:Cypher是Neo4j专为图数据库设计的查询语言,其特点包括声明性、表达性和模式匹配。声明性意味着用户只需定义要查找的数据,而不需关心实现方式;表达性强,使得Cypher对开发者和业务人员都...

    neo4j cypher语言参考文档

    **Neo4j Cypher语言是图数据库 Neo4j 的核心查询语言**,它设计得简洁易读,使得处理复杂的图数据变得直观而高效。Cypher 语法类似于 SQL,但更侧重于图形操作,如节点、关系和属性的操作。在腾讯课堂上的 Neo4j ...

    Neo4j Cypher

    Neo4j 作为一款强健的,可伸缩的高性能数据库,Neo4j最适合完整的企业部署或者用于一个轻量级项目中完整服务器的一个子集存在。 它包括如下几个显著特点: 完整的ACID支持、高可用性、轻易扩展到上亿级别的节点和关系...

    jgrapht-neo4j-client:从Neo4j Cypher查询获取JGraphT图形对象

    jgrapht-neo4j-client 是用Java实现的开源图形数据库。 是一个免费的Java图形库... 使用jgrapht-neo4j-client,您可以从Neo4j Cypher查询中获得JGraphT图形对象。 您可以在以下博客文章中了解有关此项目的更多信息:

    小型金融知识图谱构建流程neo4j python cypher KG.zip

    Jupyter-Notebook

    neo4j-cypher:Haskell Neo4j 库

    【描述】"neo4j-cypher Haskell Neo4j 库专注于密码 - 尚不可用" 表明该库的核心功能是支持 Cypher 查询,但同时也提示当前可能未处于可用状态。这可能意味着库可能仍在开发中,或者存在某些功能限制或兼容性问题。...

    Neo4j学习及Cypher基本操作

    Cypher 是 Neo4j 提供的一种声明式查询语言,用于高效地检索和更新图数据。它使用图形模式匹配作为主要机制来处理图形数据的选择。Cypher 的语法直观易懂,支持创建、读取、更新和删除操作。 #### 四、Cypher 基本...

    neo4j-graphql-java:用于GraphQL查询和Neo4j的Cypher突变的纯JVM转换

    【标题】"neo4j-graphql-java"是一个用于在Java虚拟机(JVM)环境中将GraphQL查询和突变转换为Neo4j Cypher语句的库。它旨在提供一种高效且无缝的方式,使得开发人员能够利用GraphQL的强大功能来操作图数据库——...

    Trinity:Cypher和Neo4j的VSCode扩展

    解析在VS Code中键入到当前打开文档中的Neo4j / Cypher查询/突变。 将查询/变异发送到用户配置文件中定义的数据库。 将响应渲染到VS Code上的Trinity输出通道。 (可选)根据用户的配置将输出写入本地JSON文件。 ...

    neo4j服务端开发示例,采用spring-boot开发,内含节点增删改查、关系增删改查、复杂关系的查询。

    对于更复杂的查询,可以自定义Repository方法,利用Neo4j的Cypher查询语言。Cypher是一种声明式的图形查询语言,非常适合处理图形数据的查询和更新。例如,查找所有与特定节点有关系的其他节点: ```java public ...

Global site tag (gtag.js) - Google Analytics