图谱查询
知识图谱的查询使用cypher语言,其表现力丰富,查询效率高,在图数据库中的作用于关系型数据库中的SQL语言相当。
常用基本语法:
- MATCH 用于查询有关节点,关系和属性,类似于 SQL 中的 SELECT。
- RETURN 在 MATCH 搜索完成后返回查询结果,因此 MATCH 必须与 RETURN 同时使用。
- WHERE 子句用来过滤检索
- WHERE 可以结合函数 exists() ,字符串匹配 starts with,ends with,contains,逻辑匹配 in,not,and,or 和正则表达式匹配进行更加精细的查询
- LIMIT 子句用于限制返回匹配结果的数量
查询命令 | cypher语法 | 示例 |
查找指定实体类型 | match (n:实体类型) return n | match(n:河流) return n |
查找某种属性的实体 | match (n:实体类型{属性名:'属性值'}) return n | match (n:河流{name:'大渡河'}) return n |
查找某类关系 | match p = (n)-[r]->(m) return p | match p = (n)-[r:包含]->(m) return p |
在图谱数据中,我们经常需要根据关系进行更深度的关联查询,下面示例几种常用的关联查询语句:
序号 | cypher语句 | 含义 |
1 | MATCH p=(n:河流{name:'大渡河'})-[r]-() RETURN p | 查询大渡河的所有关系(没有箭头方向) |
2 | MATCH p=(n:河流{name:'大渡河'})-[r:流经]->() RETURN p | 查询大渡河的流经关系(有箭头方向) |
3 | MATCH p=(n)-[r:流经]->(m:地区{name:'雅安'}) RETURN p 或 MATCH p=(n)-[r:流经]->(m:地区)where m.name='雅安' return n.name | 查询所有流经洪雅地区的河流 |
4 | MATCH p=(n)-[r:流经]->(m)where m.name in ['泸定县','丹巴县'] return n.name | 查询同时流经泸定县和丹巴县的河流 |
4 | MATCH p=(n:水电站{name:'瀑布沟水电站'})-[:所在河流]->(m)-[:流经]->(e) RETURN e | 查找瀑布沟水电站所在的河流流经哪些地区 |
另外,当空间实体存入YuKon数据库时,支持对实体进行数据库端空间查询。
常用空间函数:
空间函数 | 含义 |
st_Equals | 相等 |
st_Intersects | 相交 |
st_Contains | 包含 |
st_Crosses | 交叉 |
st_Within | 内部 |
st_Touches | 邻接 |
st_Overlaps | 叠加 |
st_Disjoint | 相离 |
st_Distance | 计算距离 |
查询语句示例:
序号 | cypher语句 | 含义 |
1 | match (n:country), (m:province{name:'四川省'}) where st_Contains(m.geom::geometry, n.geom::geometry) return n."name"; | 查询四川省内的县实体(空间几何为geometry类型) |
2 | match (n:country{name:'双流县'}), (m:country{name:'朝阳区'}) return st_Distance(n.geom, m.geom); | 返回双流县与朝阳区之前距离(空间几何为geography类型) |
注意事项:
在YuKon with AgensGraph中进行图谱查询时,实体属性字段必须为小写。