cypher语法

ads


图数据科学:Cypher语法集


关键词:Cypher语法;图数据科学;neo4j


摘要:

   前文自顶向下构建中药知识图谱初探和趁热打铁,再构建百万节点关系中药方剂知识图谱中,介绍了中药和方剂知识图谱的构建工作。本文将基于neo4j图数据库学习Cypher语法,为熟练使用neo4j及后续应用开发做铺垫。


1、Cypher

   Cypher是一种简单高效的图查询语言,能够对图进行高效的查询、更新和管理。详细内容可了解:

https://neo4j.com/docs/cypher-manual/current/introduction/

  如果了解SQL,可以很容易的上手Cypher,熟练应用neo4j。

2、基础知识

   本节将对Cypher数据类型和基本语法进行介绍。


2.1 数据类型

   Cypher有基本的数值类型Integer、 Float、 String、 Boolean、Point, Date、Time、LocalTime、DateTime、LocalDateTime、Duration和复合类型List 、Map。

   Cypher是图数据库,图由节点和边(关系)组成。此处,将介绍Node、Relationship和Path三种结构类型。


(1)节点Node

   Node包括id(节点id)、labels(一类节点的标签)和properties(map形式,存储节点信息),如一个labels为“中药名”的节点“地骨皮”存在neo4j中时图和表格的具体形式如图1所示。

        

 

     

图1 节点信息展示


(2)关系Relationship

   Relationship包括Id(关系id)、Type(头节点和尾节点之间的关系类型)、properties、Id of the start node(头节点id)和Id of the end node(尾节点id)。

   一个关系表示如下:

{  "identity": 1,  "start": 4775,  "end": 4774,  "type": "from",  "properties": {
}}


(3)链路Path

   节点与关联关系组成的序列。


2.2 基础语法---增删改查


(1)创建节点

   在Cypher中( )表示一个节点,因此添加一个节点需要在()中添加节点labels和properties,比如:

   创建一个label为“方名”,properties中包含name:“火郁汤”的节点语法为:

CREATE (labels:`方名` {name: "火郁汤"})

   创建一个labels为“来源”,properties中包含name:“《回春》”的节点语法:

CREATE (labels:`来源` {name: "《回春》"})


(2)创建关系

   在Cypher中[ ]表示关系,–>[ ]表示有向关系。

   为已有节点“火郁汤”和“《回春》”节点创建有向关系“from”的两种方法:

   方法1:CREATE关键词

MATCH (n1:`方名`), (n2:`来源`) WHERE n1.name = "火郁汤" and n2.name = "《回春》"CREATE (n1) - [r:`from`] -> (n2)RETURN r

   方法2:MERGE关键词

MATCH (n1:`方名` {name: "火郁汤"}), (n2:`来源` {name: "《回春》"}) MERGE (n1) - [r:`from`] -> (n2)


   同时创建节点和关系示例:

CREATE (n1:`中药名` {name: "地骨皮"}) - [r:`dose`] -> (n2:`剂量` {name: "1钱"})RETURN r


(3)创建链路

   示例语法如下

CREATE p = (n1:`处方` {name: "处方_1"}) - [r1:`composition`] -> (n2:`中药名` {name: "甘草"}) - [r2:`dose`] -> (n3:`剂量` {name: "3分"})RETURN p

   至此,创建的节点、关系和链路如图2所示: 

图2

   

   最终利用前面语法补全几个关系后的图谱如图3所示:

  图3 

   

   一个可能的语法错误:

   Neo.ClientError.Statement.SyntaxError:可能是节点labels和关系type的引号用错了,正确引号是反单引号 `


(4)删除

   删除标签和属性用关键词:REMOVE

   删除属性

MATCH (n:`来源` {name: "《回春》"})  REMOVE n.name return n

   删除标签

MATCH (n:`来源`)  REMOVE n:`来源` RETURN n

   

   删除节点和关系用关键词:DELETE

   删除单个关系:先查询,然后再删除

MATCH (n:`中药名` {name: "地骨皮"}) - [r:dose]-> (n2:`剂量` {name: "1钱"}) DELETE r

   删除单个节点:先查询,然后再删除

MATCH (n:`中药名` {name: "地骨皮"}) DELETE n

   删除链路

MATCH p = (n1:`处方` {name: "处方_1"}) - [r1:`composition`] -> (n2:`中药名` {name: "甘草"}) - [r2:`dose`] -> (n3:`剂量` {name: "3分"})DELETE p

   注意:如果节点存在关系,需要先删除关系再删除节点


   删除全部数据的关键词:DETACH DELETE

   删除一个节点和所关联的关系

MATCH (n:`方名` {name: "火郁汤"}) DETACH DELETE n

   删除所有节点和关系:清库

MATCH (n) DETACH DELETE n

(5)修改

   查询节点后可以用SET关键词设置属性和标签


(6)查询

   MATCH关键词

   

   查询所有节点标签

CALL db.labels()

   查询所有关系类型


CALL db.relationshipTypes()

   条件查询:WHERE关键词

MATCH (n:`方名`) WHERE n.name = "火郁汤" RETURN n

   多层级关系查询(多跳查询)

match (n:`处方`)-[r:composition]->(n2:`中药名`) where n2.name="甘草" or n2.name="地骨皮"  with n, r, n2 match (n2:`中药名`)-[r2:dose]->(n3:`剂量`) return n, r, n2, r2, n3

   示例结果如下:

图4

   一个复杂的示例可以参考文章:趁热打铁,再构建百万节点关系中药方剂知识图谱中的图7可视化结果。

3、总结

   本文通过示例对Cypher语法进行了介绍。这有助于neo4j的熟练使用。



主要参考文献

[1] https://neo4j.com/

[2] https://neo4j.com/docs/graph-data-science/current/

[3] neo4j中文手册:https://blog.csdn.net/qq_31034569/article/details/121323560

[4] https://www.cnblogs.com/luoyunfei99/articles/16048867.html

[5] https://blog.csdn.net/weixin_40739969/article/details/101781409

[6] https://www.cnblogs.com/sea520/p/11940400.html

[7] https://blog.csdn.net/mryang125/article/details/108387528


欢迎关注与留言

最后编辑于:2024/1/9 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com