最近使用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-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语句)学习 - 赵晓雷的专栏 - CSDN博客.html │ Neo4j_事务&深度遍历.html │ neo4j中的分组查询.html │ Neo4j之Cypher学习总结.html │ NEO4J亿级数据导入导出以及数据更新 - 耶和华靠近伤心的...
Neo4j Cypher查询格式化程序 当我刚开始使用Neo4j和Cypher时,我总体上很喜欢这种语法-但是我看不到任何简单易用的在线查询格式化程序-因此是这个项目。 它使用原始正则表达式方法进行未格式化的Cypher查询,并返回...
所有基础的语法基本都包括了
知识图谱之存储及查询,图数据库Neo4j及其查询语言基本操作的范例
cycli, Cypher的命令行 接口 Neo4j cycli 一种面向 Neo4j的查询语言的命令行接口。 安装如果你还没有,下载并安装 Neo4j 。 然后,安装 cycli:$ pip install cycli启动首先,从终端执行 cycl
快速学会neo4j开发,同时带有java驱动使用方法,看懂这个能保证短时间内拥有开发neo4j基础,适合初级,牛人就不用下了.
目前很多项目针对neo4j的操作采用Neo4j OGM JAVA API,该方案与springboot整合之后可以使用@Query注解很方便的编写查询接口,比如这篇SpringBoot集成neo4j实战。 但是这种方式对图数据库的增删改查均依赖业务数据...
这个实现为Neo4j提供了一个GraphQL API,它作为库来使用,但是也可以作为Neo4j服务器扩展安装,以充当GraphQL端点。 它将GraphQL查询和突变转换为Cypher语句,并在Neo4j上执行。
Neo4j图数据库社区版4.0.4,从neo4j官网上下载的,适用于windows操作系统。Neo4j是目前比较火的图数据库,包含存储,可视化功能,使用cypher语句操作。
底层功能实现是操作cypher语句,前台的业务: 1.汉语分词器HanLP将原始语句分词 2.语句抽象化(提高匹配问题模板标签准确率) 3.获取模板标签,使用模板将句子转化成系统可以识别的结果 4.cypher语句获取结果返回...
## neo4j研究报告 ## 简介 你可以把Neo看作是一个高性能的图引擎,该引擎具有成熟和健壮的数据库的所有特性。 程序员工作在一个面向对象的、灵活的网络结构下而...5. 数据更直观:相应SQL语句也更好写(Neo4j使用Cypher
展示了neo4j图数据库常用的基础语句思维导图,将相关联的语句整合到一起,并包括常用的断言函数、列表函数、聚合等,也加入一部分例子用来理解,方便初学者学习思维。
特性: 1.neo4j自带的服务端对中文建立的内置索引分词粒度以字为单位,不太符合实际需求,而且cypher语法没有对分词器的选择操作语句,修改采用elastic做中间业务处理索 - 不懂运行,下载完可以私聊问,可远程教学 该...
Neo4j HA集群配置(示例) 高可用性集群 ...读写重定向不适用于Cypher HTTP端点,因为它对所有Cypher语句(读写)都使用POST方法。 创建.sh 该脚本将在您的本地计算机上安装Neo4j群集,以进行测试。
按如下Cypher查询语句导出均可以展示:MATCH p=(n:节点类型)-[r:关系类型]->() RETURN p limit 20如何配置为自己的数据在 [removed] 标签中定位,修改如下几行代码即可,不需要在到处去找位置了// 自定义图标及颜色...
3、本项目以neo4j作为存储,并基于传统规则的方式完成了知识问答,并最终以cypher查询语句作为问答搜索sql,支持了问答服务。 4、本项目可以快速部署,数据已经放在data/medical.json当中,本项目的数据,在本项目...
Neo4j数据库连接器:用于Cypher 数据库:具有多个数据库的Neo4j-Server(4.x) 前端:jquery,bootstrap, 使用或快速配置数据库。 快速开始 设置 $ npm install 在本地运行 在本地启动Neo4j(),然后打开。 ...
它允许您使用易于阅读的 DSL 构建 Cypher 查询,这些 DSL 在编译阶段会自动验证。 它还处理结果到域类的映射。 开始构建查询所需要的只是定义扩展 DomainObject 的类。 您可以使用 <--、-->、-- 方法定义关系...