Neo4j图形数据库的一些基本Cypher查询指令总结

本文对一些我平时常用的较方便的查询语句进行了总结,要想全面的学习Cypher查询语言入门,可以参考文章:https://www.cnblogs.com/ljhdo/p/5516793.html

1 Cypher查询语言简介

Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,不必编写图形结构的遍历代码实现对图形存储有表现力和效率的查询。由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为图形查询语言的事实上的标准。

Cypher设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员。它的构念是基于英语单词和灵巧的图解。Cyper通过一系列不同的方法和建立于确定的实践为表达查询而激发的。许多关键字如like和order by是受SQL的启发。模式匹配的表达式来自于SPARQL。正则表达式匹配实现实用Scala programming language语言。

Cypher查询语言重点包含以下几个部分:

  • START:图中的开始点,通过元素的ID或索引查找获得。
  • MATCH:图形的匹配模式,束缚于开始点。
  • WHERE:过滤条件。
  • RETURN:返回所需要的。

2 一些常用语句

2.1 批量创建导入节点

# 从csv文件中批量导入节点
LOAD CSV WITH HEADERS FROM 'file:///MCTao.csv' AS line FIELDTERMINATOR ','
CREATE (:AlignmentObject { name:line.name,ranker:line.ranker2,level:line.level,url:line.url,description:line.description})

若结点名称等属性为中文,一定要注意编码格式为“UTF-8",否则会出现乱码。

2.2 查看节点

# 查看特定节点
Match (n) where n.ranker='MCTao1' return n

# 查询ranker中包含'MCTao'的节点
Match (n) where n.ranker Contains 'MCTao' return n

2.3 批量删除节点

Match (n) where n.ranker Contains 'MCTao' delete n

2.4 批量创建导入节点间关系

LOAD CSV WITH HEADERS FROM "file:///MCTao.csv" AS line with line
merge  (p1:KnowledgeBlock{ranker:line.ranker1})
merge  (p2:AlignmentObject{ranker:line.ranker2})
WITH * create (p1)-[r:hasPartOf]->(p2)

2.5 查询节点间关系

MATCH ()-[r]-(n) where n.ranker Contains 'CTao' RETURN n,r

2.6 批量删除节点间关系

MATCH ()-[r]-(n) where n.ranker Contains 'CXkb' DELETE n,r

2.7 查找节点属性

# 查找对应的四级节点与三级节点的ranker
match (m)-[]-(n)  where n.ranker Contains 'CTao' return m.ranker,n

下载csv文件作为备份保存:
在这里插入图片描述

2.8 从MySQL数据库导入数据至Neo4j

具体可参考我的另一篇博客:https://blog.csdn.net/strivequeen/article/details/110400741

2.9 为结点批量添加属性

CALL apoc.load.jdbc(
  'jdbc:mysql://ip:3306/knowledgePoint?user=root&password=000&useUnicode=true&characterEncoding=utf8',
  'select * from 通信原理_kp'
) YIELD row
MATCH (n) where n.ranker=row.ranker2 SET n.videos_url=row.video_explanation

2.10 单独更改某结点的属性

MATCH (n) where n.ranker='CTku1' SET n.description='description'
MATCH (n) where n.ranker='CPAao2271' SET n.description_baidu='随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。' n.name='ram'

2.11 补充导入关系(边)

CALL apoc.load.jdbc(
  'jdbc:mysql://ip:3306/knowledgePoint?user=root&password=000&useUnicode=true&characterEncoding=utf8',
  'select * from 通信原理_align'
) YIELD row
merge  (p1:KnowledgeBlock{ranker:row.ranker1})
merge  (p2:AlignmentObject{ranker:row.ranker2})
WITH * merge (p1)-[r:hasPartOf]->(p2)
# merge可以看成是match和create的合体

2.12 查找特定结点与连接关系三元组

MATCH p=()-[r:hasPartOf]->(n) where n.ranker="CTao143" RETURN p

2.13 模糊匹配

Neo4j 不区分大小写的模糊查询匹配
在正则表达式的前面加上(?i) : =~"(?i)regexp"

# 模糊知识点的大小写匹配,全转化成小写
MATCH (n) where lower(n.name)=lower(row.knowledgePoint) SET n.alias=row.Alias

2.14 删除多余的关系

# 查看边数量
MATCH p=()-[r:hasPartOf]->(n) where n.ranker contains "CTao" RETURN count(p)

# 删除多余的边
MATCH (a)-[r:hasPartOf]->(b)
WITH a, b, TAIL (COLLECT (r)) as rr
WHERE size(rr)>0
FOREACH (r IN rr | DELETE r)

2.15 导入边属性

CALL apoc.load.jdbc(
  'jdbc:mysql://ip:3306/knowledgePoint?user=root&password=000&useUnicode=true&characterEncoding=utf8',
  'select * from 通信原理_rel'
) YIELD row
merge  (p1:KnowledgeBlock{ranker:row.ranker1})
merge  (p2:AlignmentObject{ranker:row.ranker2})
WITH * merge (p1)-[r:hasPartOf{word_freq:row.word_frequency}]->(p2)
# merge可以看成是match和create的合体

# 查看已导入边属性
MATCH p=()-[r:hasPartOf]->(n) where exists(r.word_freq) return p

3 Neo4j的数据备份与还原方法(neo4j-admin方式)

  1. 切到安装目录的bin下;
  2. 保证neo4j为停止状态;./neo4j stop
  3. 执行数据导出命令 ./neo4j-admin dump --database=graph.db --to=/mnt/data/kg/Neo4j手动备份/20210816.dump
  4. 还原时也在bin目录下;
  5. 数据导入命令 ./neo4j-admin load --from=/mnt/data/kg/Neo4j手动备份/20210705.dump --database=graph1.db --force

4 一些报错与解决

(1)

在这里插入图片描述
原因:MySQL所在服务器地址搞错了,没有改成修改之后的地址。

(2)

在这里插入图片描述
原因:要导入的数据中存在NULL的数据。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值