通过学习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

Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐