图谱查询

知识图谱的查询使用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中进行图谱查询时,实体属性字段必须为小写。