通过学习Cypher的基础语法,再结合实际应用的图谱检索需求,比如有时候需要查找多跳关系的节点、最短路径、多关系多层次查找、相关检索和模糊检索等,整理形成了基于Cypher的高级查询,后续会根据实际应用情况继续完善补充,并参考Bloom继续完善。供大家学习参考。
1.查询xx盆地本身及其4跳关系的数据
MATCH (p:com_basin { name:'xx盆地'}) - [*0..4]- (x)
RETURN x limit 50
2.模糊搜索,相当于SQL中的like '%储层特征%'
MATCH (a:resultSummary)
WHERE a.name=~ '.*储层特征.*'
RETURN a limit 25;
或者
MATCH (n:resultSummary)
where n.name contains '储层特征' RETURN n LIMIT 25;
3.广度优先查询指定信息的相关节点
MATCH (n:result)-[r:has_key*1..4]-(m)
WHERE n.name =~'完井地质.*'
RETURN n,r,m limit 50
4.查询仅返回给定根节点的第一级子节点
MATCH (n:resultSummary)-[r:has_key*]->(es:resultKeys)
WHERE n.name =~'.*生烃潜力.*'
RETURN n,es,r limit 100
5.支持关系的扩展查询
MATCH (n:resultSummary)
WHERE n.name =~'.*生烃潜力.*'
CALL apoc.path.expandConfig(n,{relationshipFilter:"has_key",maxLevel:3,uniqueness:"NODE_GLOBAL"}) YIELD path
WITH n, RELATIONSHIPS(path) as r, LAST(NODES(path)) as es
WHERE es:resultKeys
RETURN n,es,r limit 100
6.查询某个节点上下3层关系的数据
match p = ()-[*0..3]->(n:com_well{name:'WZ11-1N-A2'})-[*0..3]->() return p limit 50
7.查询既有A关系又有B关系的节点
match (n:com_ogf_reg)-[:has_key]->(n1:result)
with n, n1
match (n)-[:has_well]->(n1)
return n, n1 limit 50
8.查询两个节点之间的最短路径的节点数据
MATCH (p:com_basin{name:"xxx盆地"}),(q:resultKeys{name:"完钻层位"}),(r:resultKeys{name:"xx组"}),
a=shortestpath((p)-[*..10]-(r))
RETURN a
9.查询两个标签中,与指定1个节点的上下次关系在4以内的数据
MATCH data=(na:com_basin{name:"xx盆地"})-[*1..4]->(nb:resultSummary) return data limit 25
10.查询具有一定深度的节点
match p=()-[*2..4]-()
return p
limit 50
11.查询某个标签的节点总数
match (n:com_well) return count(n) as well_num