neo4j-cypher
cypher查询务必在需要查询的节点上加上标签,否则数据量一大查询就会非常慢(在查询时必须设置实体标签,否则不走索引),另外Neo4j索引做好了查询的优化基本上就完成了80%。需要注意index是建立在label上的,不是在node上,所以一个node有多个label,需要对每一个label都建立index。直接根据ID查询效率也比较高。
一、索引的创建分为单属性索引和复合索引:
1、创建单属性索引
CREATE INDEX ON :地(name);
2、创建复合索引
CREATE INDEX ON :账号(name,event_site_name,site_name);
3、创建唯一限制(多属性联合唯一限制社区版本目前不支持)
CREATE CONSTRAINT ON(n:地)ASSERT n.name IS UNIQUE;
二、常用查询
1、 删除节点和关系
match p=(n)-[r]-(m) where n.name=~'.*name.*' delete n,r;
match p=(n)-[r]-(m) where n.name contains 'name' delete n,r; // 模糊查询也可以使用非正则的形式(关键字)
2、.删除节点(删除时知识图谱全是独立的实体节点没有关系,如果存在关系必须先删除关系)
match(n:事 {name:'2'}) delete n;
3、删除所有节点和关系
match(n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
4、查询所有节点
match(n) return n;
5、通过name查询节点
Match (n:人) where n.姓名='李泽钜' return n
6、通过关系类型查询-过滤与青海省有隶属关系的市
MATCH (省 { NAME:'青海省' })<-[:隶属关系]-(市) RETURN 市;
7、关联节点的name
MATCH (省 { NAME:'青海省' })--(市) RETURN 市.NAME
MATCH (省 { NAME:'青海省' })-[]-(市) RETURN 市.NAME
8、带索引的查询会更快速
MATCH (n:地 { NAME:'青海省' })--(m:市) RETURN m;
9、查询关系的名称
match( p1:市 {NAME:"西宁市"} )-[rel:隶属关系]->(p2) return p2.NAME
10、距离为1到3的关联节点
match(n:国家 {NAME:'中国'})-[*1..3]-(p) return n,p;
[ ] 括号内n的意义:
n 距离为n
..n 最大距离为n
n.. 最小距离为n
m..n 距离在m到n之间
11、国家省市区县
match p=(n:国家 {NAME:'中国'})-[:隶属关系*..2]-(m) with *,relationships(p) as r return n,m;
12、多标签查询
match (n:人:演员) return n;
13、通过节点ID查询
match (user)-[:主要成就]->(p) where id(user)=71 return p;
match (n) WHERE id(n)=99815 RETURN n;
14、通过多个节点ID查询
start user=node(71,68) match (user)-[:主要成就]->(p) return p;
15、删除带有关系的节点
start grace=node(10) match grace-[r]-() delete grace,r
16、更新节点属性
start user=node(1,2) set user.group='ADMINISTRATOR'
17、删除节点属性
start n=node(1) delete n.group;
18、删除关系
start grace=node(69) match (grace)-[r:妻子]-() delete r
start grace=node(71) match (grace)-[r:妻子]->(p:人 {name:'庄月明'}) delete r
19、删除节点与关系
start grace=node(89264) match (grace)-[r]-() delete grace,r
20、match子句和create的组合,MERGE子句
MERGE (michael:Person { name: 'Michael Douglas' }) RETURN michael;
21、人员距离为N的时候寻找与之有关联的人员
match p=(n:人 {name:'WQ111'})-[*..2]-(m:人) with *,relationships(p) as r return n,m;
22、统计当前图数据库的节点数量
MATCH (n) RETURN count(n);
23、统计当前图数据库的关系数量
MATCH ()-->() RETURN count(*);
24、What kind of nodes exist. Sample some nodes, reporting on property and relationship counts per node.
MATCH (n) WHERE rand() <= 0.1
RETURN
DISTINCT labels(n),
count(*) AS SampleSize,
avg(size(keys(n))) as Avg_PropertyCount,
min(size(keys(n))) as Min_PropertyCount,
max(size(keys(n))) as Max_PropertyCount,
avg(size( (n)-[]-() ) ) as Avg_RelationshipCount,
min(size( (n)-[]-() ) ) as Min_RelationshipCount,
max(size( (n)-[]-() ) ) as Max_RelationshipCount
25、What is related, and how(Neo4j函数可以在Cypher语句的任何关键字附近使用,而过程非也)
CALL db.schema() // Neo4j过程(这些是Neo4j自带过程,非自定义过程)
26、List node labels
CALL db.labels()
27、List relationship types
CALL db.relationshipTypes()
28、Display constraints and indexes
:schema
29、查询与周迅有直接关系的明星
match m=(:明星 {名称:'周迅'})-[*..1]-() return m;
30、查询周迅与王菲的最短路径
MATCH p = shortestPath((周迅:明星 {名称:"周迅"})-[*..6]-(王菲:明星 {姓名:"王菲"}))RETURN p;
31、查询周迅与王菲的所有最短路径
MATCH p = allShortestPaths((周迅:明星 {名称:'周迅'})-[*..6]-(王菲:明星 {姓名:'王菲'})) RETURN p;
match p=allshortestpaths((n:People {name:'蔡成功'})-[*..6]-(m:People {name:'季昌明'})) return p;
32、查询股票与股东的关系
match m=(h:Holder)-->(s:Stock) where s.name=~".*五矿.*" return m;
33、给已经存在的人添加关系
Match (n:Person {id:'erzi'}),(f:Person {id:'bozi'}) Merge (n)-[:fuqi]->(f)
34、儿子和柏之结婚了,relation修改
Match (n:Person ),(f:Person)
where n.id='erzi' and f.id='bozi'
Merge (n)-[r:fuqi]->(f) delete r
Merge (n)-[:FUQI]->(f)
return n,f
35、更新属性
Match (n:Person {id:'baba'}) set n.name='张三' return n;
36、删除label
MATCH (n:Test) remove n:Test
remove和delete都应该与match命令一起使用,
DELETE操作用于删除节点和relation。
REMOVE操作用于删除标签label和属性。
37、删除与该关系相关的老师和学生及label
MATCH (s:Teacher)-[r:teach]->(d:Student) delete r,s,d
38、更新属性
Match (n:Person {id:'baba'}) set n.name='张三' return n;
39、仅仅删除一个relation
Match (a:Person),(b:Person) where a.id='erzi' and b.id='bozi' merge (a)-[r:FUQI]->(b) DELETE r
40、排序 order by
-降序 MATCH (n:Person) RETURN n order by n.id,n.name desc LIMIT 25
--正序 MATCH (n:Person) RETURN n order by n.id LIMIT 25
41、Limit 和 skip
Limit : 显示多少行,最前边开始, Skip:跳过前多少行
MATCH (n:Person) RETURN n order by n.id desc skip 2 LIMIT 25
42、Union 和 union all
Union:把多段Match的return结果 上线组合成一个结果集,会自动去掉重复行;
Union all:作用同union,但不去重;
eg. MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id='erzi' RETURN n.id,n.age
43、Null需要注意什么
eg. MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id='erzi' and n.age is not null RETURN n.id,n.age
Where 属性 is null or is not null
44、In语法
MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id in ['erzi','bozi','baba'] RETURN n.id,n.age
45、内置 id
Create (a:Person {id:’123’}) //这里的ID是一个属性,和内置ID是两码事
通过函数id(node/relation)可以获取id值
46、索引index(根据需要把查询多的字段建索引(create index on :Person(name))
neo4j-cypher的更多相关文章
- Neo4j Cypher语法(三)
目录 5 函数 5.1 谓词函数 5.2 标量函数 5.3 聚合函数 5.4 列表函数 5.5 数学函数 5.6 字符串函数 5.7 Udf与用户自定义函数 6 模式 6.1 索引 6.2 限制 7 ...
- Neo4j Cypher运行示例
示例来源: Neo4j in Action. 0 准备数据 0.1 node (user1 { name: 'John Johnson', type: 'User', email: 'jsmith@e ...
- Neo4j Cypher语法(二)
目录 4 子句 4.1 CREATE 4.2 MATCH 4.3 Match 4.4 Create match return连用来返回一个关系基础 4.5 Optional_match 4.6 Wit ...
- Neo4j Cypher语法(一)
目录 Cypher手册详解 1 背景 2 唯一性 3 语法 3.1 命名规则 3.2 表达式 3.3 变量与保留关键字 3.4 参数 3.5 操作符 3.6 模式 3.7 列表 Cypher手册详解 ...
- Neo4j Cypher查询语言详解
Cypher介绍 "Cypher"是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询.Cypher还在继续发展和成熟,这也就意味着有可能会出现 ...
- Neo4j/cypher学习笔记与学习建议
简介 本笔记的主要内容是 cypher 查询语言的编写与使用. 笔记主要整理自w3cschool上的neo4j教程以及Neo4j中文网所提供的cypher中文文档,此外还包括少量从其他个人博客与官方手 ...
- Neo4J(Cypher语句)初识
欢迎各路大神临幸寒舍 以下节点标签为people,friend,用户自己也可以设置成其他标签,查询时需要用到标签.这个标签可以类比为关系数据库中的表名 创建节点.关系 创建节点(小明):create ...
- Neo4j/Cypher: All paths between two nodes with a relationship property filter
解决方案一 I am trying to perform a query to retrieve all paths between two nodes a and b in which all th ...
- Neo4j数据和Cypher查询语法笔记
Cypher数据结构 Cypher的数据结构: 属性类型, 复合类型和结构类型 属性类型 属性类型 Integer Float String: 'Hello', "World" B ...
- 关于图数据库查询语言:Cypher
Neo4j Cypher Refcard:http://neo4j.com/docs/cypher-refcard/current/Neo4j发布开源图查询语言openCypher:http://ww ...
随机推荐
- PHP——秒数转换为时分秒
前言 通讯记录需要用到的一个方法,就是将秒转为时分秒 方法 PHP有内置的方法,直接用即可,不过这个只是24小时以内.对于通讯录来说是够用了~ 示例 $v = 30; gmdate('H:i:s', ...
- 【dp】摘花生
[题目描述] Hello Kitty想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来.地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经 ...
- [HNOI/AHOI2018]游戏
题目描述 https://lydsy.com/JudgeOnline/upload/201804/%E6%B9%96%E5%8D%97%E4%BA%8C%E8%AF%95%E8%AF%95%E9%A2 ...
- java-最大连续子数组和(最大字段和)
1.题目要求 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和为0, ...
- CF1153D Pigeon d'Or
Description 给一棵树,每个点是子节点的最大值或最小值,将叶子节点填上整数,使这棵树的根最大. Solution 明显的\(dp\)题,代码很短. 分类讨论如下: 1.如果是叶子节点,\(d ...
- consul实现分布式锁
分布式一致性问题: 分布式的CAP理论告诉我们"任何一个分布式系统都无法同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tole ...
- 使用cert-manager实现Ingress https
什么是https 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报 ...
- 实现select联动效果,数据从后台获取
效果如下: 当type值选择完后,amount值会自动相应填入. 1. 从后台获取数据,为一个数组,里面包含多个对象. <select id="scholarshipTypeSelec ...
- Apache Hadoop 2.9.2 的集群管理之服役和退役
Apache Hadoop 2.9.2 的集群管理之服役和退役 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 随着公司业务的发展,客户量越来越多,产生的日志自然也就越来越大来,可能 ...
- [图解Java]Condition
图解Condition 0. demo 我先给出一个demo, 这样大家就可以根据我给的这段代码, 边调试边看源码了. 还是那句话: 注意"My" , 我把ReentrantLoc ...