neo4j语法

cypher语法

cypher查询语句既可以在cypher-shell中使用,也可以在python中使用。
在python中使用:

from py2neo import Graph

g = Graph(host='127.0.0.1', auth=('neo4j', 'neo4j'))

sql = "MATCH p=(s)-[r]->(o) where s.name='普通感冒' and labels(s)=['疾病'] and type(r)="病因" RETURN s.name, type(r), o.name, labels(o) limit 3"
res = g.run(sql)

In [15]: type(res)     # 查询结果得到一个游标,可以通过for或者next进行遍历取得每条结果数据,或者可以转成其他格式数据                                                                                                                                            
Out[15]: py2neo.database.work.Cursor

In [12]: res.data()   # data函数可以转化成一个list,list的每个元素为一个dict,dict的key即为sql中返回的字段                                                                                                                               
Out[12]: 
[{'s.name': '普通感冒',
  'type(r)': '病因',
  'o.name': '病毒感染',
  'labels(o)': ['disease']},
 {'s.name': '普通感冒',
  'type(r)': '病因',
  'o.name': '鼻病毒',
  'labels(o)': ['disease']},
 {'s.name': '普通感冒', 'type(r)': '病因', 'o.name': '冠状病毒', 'labels(o)': ['病原体']}]

In [16]: res.to_data_frame()          # to_data_frame函数可以转化成dataframe                                                                                                                       
Out[16]: 
  s.name type(r) o.name  labels(o)
0   普通感冒      病因   病毒感染  [disease]
1   普通感冒      病因    鼻病毒  [disease]
2   普通感冒      病因   冠状病毒      [病原体]

Out[5]: 
 s.name | type(r) | o.name | labels(o)              
--------|---------|--------|------------------------
 普通感冒   | 病因      | 病毒感染   | ['disease']            
 普通感冒   | 病因      | 鼻病毒    | ['disease']            
 普通感冒   | 病因      | 冠状病毒   | ['\u75c5\u539f\u4f53']

Input:
MATCH(n) RETURN count(n);  # 统计节点数量

Output:
+----------+
| count(n) |
+----------+
| 26220    |
+----------+

Input:
MATCH p=(s)-[r]->(o) RETURN count(p);  # 统计关系的数量

Output:
+----------+
| count(p) |
+----------+
| 39284    |
+----------+

match (n) detach delete n;  # 删除所有节点

查询操作

Input:
MATCH p=(s)-[r]->(o) RETURN p LIMIT 10;  # 查询所有关系

Output:
+---------------------------------------------------------------+
| p                                                             |
+---------------------------------------------------------------+
| (:疾病 {name: "血吸虫病"})-[:疾病所需检查]->(:检查 {name: "血细胞计数"})         |
| (:疾病 {name: "慢性淋巴细胞白血病"})-[:疾病所需检查]->(:检查 {name: "血细胞计数"})    |
| (:疾病 {name: "肾小球肾炎"})-[:疾病所需检查]->(:检查 {name: "血细胞计数"})        |
| (:疾病 {name: "类癌综合征"})-[:疾病所需检查]->(:检查 {name: "血细胞计数"})        |
| (:疾病 {name: "鞭虫病"})-[:鉴别诊断]->(:疾病 {name: "钩虫病"})              |
| (:疾病 {name: "hookworm diseases"})-[:同义词]->(:疾病 {name: "钩虫病"}) |
| (:疾病 {name: "钩虫病"})-[:并发症]->(:疾病 {name: "失血性贫血"})             |
| (:疾病 {name: "先天性甲低"})-[:临床表现]->(:症状 {name: "食欲缺乏"})           |
| (:疾病 {name: "低血糖"})-[:临床表现]->(:症状 {name: "食欲缺乏"})             |
| (:疾病 {name: "新生儿呕吐"})-[:临床表现]->(:症状 {name: "食欲缺乏"})           |
+---------------------------------------------------------------+


Input:
MATCH p=(s:疾病{name:'普通感冒'})-[r:病因]->(o) RETURN s.name, type(r), o.name, labels(o);  # 返回sub的名字、关系的名字、obj的名字和类型
MATCH p=(s)-[r]->(o) where s.name="普通感冒" and labels(s)=['疾病'] and type(r)="病因" RETURN s.name, type(r), o.name, labels(o); 

Output:
+-----------------------------------------------+
| s.name | type(r) | o.name    | labels(o)      |
+-----------------------------------------------+
| "普通感冒" | "病因"    | "病毒感染"    | ["disease"]    |
| "普通感冒" | "病因"    | "鼻病毒"     | ["disease"]    |
| "普通感冒" | "病因"    | "冠状病毒"    | ["病原体"]        |
| "普通感冒" | "病因"    | "副流感病毒"   | ["disease"]    |
| "普通感冒" | "病因"    | "呼吸道合胞病毒" | ["check_item"] |
| "普通感冒" | "病因"    | "埃可病毒"    | ["病原体"]        |
| "普通感冒" | "病因"    | "柯萨奇病毒"   | ["病原体"]        |
| "普通感冒" | "病因"    | "冠状病毒"    | ["致病因素"]       |
| "普通感冒" | "病因"    | "流感病毒"    | ["disease"]    |
| "普通感冒" | "病因"    | "偏肺病毒"    | ["致病因素"]       |
+-----------------------------------------------+


Input:
MATCH p=(s:`疾病`{name: '普通感冒'})-[r:`临床表现`{inStage:'发病同时或数小时后'}]->(o) RETURN o.name;  # 普通感冒指定发病时间段时的症状
MATCH p=(s:`疾病`{name: '普通感冒'})-[r:`临床表现`]->(o) where r.inStage='发病同时或数小时后' RETURN o.name;

Output:
+----------+
| o.name   |
+----------+
| "喷嚏"     |
| "鼻塞"     |
| "流清水样鼻涕" |
+----------+


Input:
MATCH (s)-[r]->(o) where type(r)=~'.*治疗' and s.name='普通感冒' return s.name, type(r), o.name;  # 模糊查询

Output:
+--------------------------------+
| s.name | type(r) | o.name      |
+--------------------------------+
| "普通感冒" | "药物治疗"  | "解热镇痛剂"     |
| "普通感冒" | "药物治疗"  | "抗组胺剂"      |
| "普通感冒" | "药物治疗"  | "氢可酮"       |
| "普通感冒" | "药物治疗"  | "可待因"       |
| "普通感冒" | "药物治疗"  | "含阿片类药物"    |
| "普通感冒" | "药物治疗"  | "布洛芬"       |
| "普通感冒" | "药物治疗"  | "对乙酰氨基酚"    |
| "普通感冒" | "药物治疗"  | "阿司匹林"      |
| "普通感冒" | "药物治疗"  | "镇痛药的联合治疗"  |
| "普通感冒" | "药物治疗"  | "减充血剂"      |
| "普通感冒" | "药物治疗"  | "含抗组胺药"     |
| "普通感冒" | "药物治疗"  | "西替利嗪"      |
| "普通感冒" | "药物治疗"  | "伪麻黄碱"      |
| "普通感冒" | "药物治疗"  | "异丙托溴铵"     |
| "普通感冒" | "药物治疗"  | "羟甲唑啉"      |
| "普通感冒" | "药物治疗"  | "可待因和氢可酮"   |
| "普通感冒" | "药物治疗"  | "阿片类药物"     |
| "普通感冒" | "药物治疗"  | "藿香正气滴丸"    |
| "普通感冒" | "药物治疗"  | "非洲天竺葵"     |
| "普通感冒" | "药物治疗"  | "补充维生素 C"   |
| "普通感冒" | "药物治疗"  | "维生素 C"     |
| "普通感冒" | "药物治疗"  | "抗生素"       |
| "普通感冒" | "其他治疗"  | "疫苗"        |
| "普通感冒" | "其他治疗"  | "维持足够的液体摄入" |
| "普通感冒" | "其他治疗"  | "休息"        |
| "普通感冒" | "其他治疗"  | "针灸和艾灸"     |
| "普通感冒" | "其他治疗"  | "艾灸"        |
| "普通感冒" | "其他治疗"  | "针灸"        |
+--------------------------------+
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容