超详细--neo4j cypher match详细用法

用python将csv导入neo4j的代码

with open('test.csv', 'r', encoding='utf-8-sig') as f:
            reader = csv.reader(f)
            for item in reader:
                # if reader.line_num==1:
                #    continue
                print("当前行数:", reader.line_num, "当前内容:", item)

                outlaw_node = Node("犯罪者", name=item[2])
                victim_node = Node("受害者", name=item[1])
                month_node = Node('月份', name=item[0])
                loss_node = Node('损失', name=item[4])

                relation1 = Relationship(outlaw_node, item[3], victim_node)
                relation2 = Relationship(outlaw_node, '犯罪日期', month_node)
                relation3 = Relationship(victim_node, '损失', loss_node)
                relation4 = Relationship(victim_node, '被攻击时间', month_node)

                g.merge(outlaw_node, "犯罪者", "name")
                g.merge(victim_node, "受害者", "name")
                g.merge(month_node, "月份", "name")
                g.merge(loss_node, "损失", "name")

                g.merge(relation1, "犯罪者", "受害者")
                g.merge(relation2, "犯罪者", "月份")
                g.merge(relation3, "受害者", "损失")
                g.merge(relation4, "受害者", "月份")

代码就不解释了都是一些基本语法,neo4j图数据的基本结构如下

在这里插入图片描述

下面的match用法请结合上面给出的信息

match之-------只查询一个目标的点

match (p:`犯罪者`{name:'非法组织'}) return p;

结果

在这里插入图片描述

----------------------------------------------------------------------------------------------

match之-----------返回所有和p有连线的节点

match(n)--(p:`月份`{name:'2021年5月'}) return n;

结果

在这里插入图片描述

----------------------------------------------------------------------------------------------

match之-----------返回所有指向p点的节点(即p为终点)

!!!注意多了箭头 !!!

match(n)-->(p:`受害者`{name:'美国公司CNA金融'}) return n;

结果

在这里插入图片描述

----------------------------------------------------------------------------------------------

match之-----------返回所有p点所指出去的点,即P点是起点

match(n)<--(p:`受害者`{name:'美国公司CNA金融'}) return n;

结果

在这里插入图片描述

----------------------------------------------------------------------------------------------

match之-----------返回所有p点指向的月份的点,P为起点

match(n:`月份`)<--(p:`受害者`{name:'美国公司CNA金融'}) return n;

结果

在这里插入图片描述

----------------------------------------------------------------------------------------------

match之-----------返回n点和p点之间的关系类型

match(n:`受害者`{name:'富士康CTBG MX设备'})<-[r]-(p:`犯罪者`) return type(r);

结果

在这里插入图片描述

----------------------------------------------------------------------------------------------

match之-----------利用关系和终点查询

match(n:`受害者`{name:'富士康CTBG MX设备'})<-[r:`勒索软件攻击`]-(p) return p;

结果

在这里插入图片描述

----------------------------------------------------------------------------------------------

进阶篇—里面的双引号是插入自定义的字符串

----------------------------------------------------------------------------------------------

卡时间轴

match(outlaw:`犯罪者`)-[:`犯罪日期`]->(month:`月份`),
(outlaw:`犯罪者`)-[attack_method]->(victim:`受害者`)-[:`损失`]->(loss:`损失`) 
where (victim:`受害者`)-[:`被攻击时间`]->(month:`月份`) 
and 
date('"+month1+"')<=date(month.name)<=date('"+month2+"') 
return outlaw.name, type(attack_method),victim.name,loss.name;

注意date的格式必须是2013-02-28,2014-11-02这种

否则cypher不认识

----------------------------------------------------------------------------------------------

更多样例

match(outlaw:`犯罪者`{name:'"+outlaw7+"'})-[r]->(victim:`受害者`)-[:`损失`]->(loss:`损失`),
(month:`月份`) 
where 
date('"+month1+"')<=date(month.name)<=date('"+month2+"') 
and 
(victim:`受害者`)-[:`被攻击时间`]->(month:`月份`) 
and 
(outlaw:`犯罪者`)-[:`犯罪日期`]->(month:`月份`) 
return victim.name,loss.name;
match (犯罪分子:`犯罪者`)-[r:`"+attack_method15+"`]->(受害者:`受害者`)-[:`损失`]->(损失:`损失`),
(月份:`月份`) 
where 
(犯罪分子:`犯罪者`)-[:`犯罪日期`]->(月份:`月份`)
and 
(受害者:`受害者`)-[:`被攻击时间`]->(月份:`月份`) 
return 月份.name,犯罪分子.name,受害者.name,损失.name;
match(loss:`损失`)<-[:`损失`]-(victim:`受害者`),
(outlaw:`犯罪者`{name:'"+outlaw2+"'})-[r]->(victim:`受害者`),
(month:`月份`) 
where 
(victim:`受害者`)-[:`被攻击时间`]->(month:`月份`{name:'"+month2+"'}) 
and 
(outlaw:`犯罪者`{name:'"+outlaw2+"'})-[:`犯罪日期`]->(month:`月份`{name:'"+month2+"'})  
return victim.name,loss.name;
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值