You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在MariaDB的OQGRAPH查询中筛选节点间的关系?

在MariaDB OQGRAPH中获取节点间关系的方法

嘿,刚好我对OQGRAPH存储引擎有过实践,你想在查询里拿到节点间的具体关系类型,完全可以实现,给你两种实用的方案:

方案1:用traverse模式遍历每一段相邻关系

OQGRAPH的traverse模式会返回路径中的每一对相邻节点,我们只需要把它和原始的people_relationships表关联,就能直接拿到对应的关系:

SELECT 
  g.origid, 
  g.destid, 
  pr.relationship,
  g.distance
FROM people_graph g
JOIN people_relationships pr 
  ON g.origid = pr.origid AND g.destid = pr.destid
WHERE g.latch = 'traverse' 
  AND g.origid = 1 
  AND g.destid IS NOT NULL;

这个查询会返回从节点1出发,每一步跳转的节点对和对应的关系(比如1→2是friend,2→3是friend等),还能看到每段的距离(默认是1)。

方案2:结合dijkstras模式获取完整路径的关系序列

如果想一次性拿到从节点1到目标节点的完整路径,同时附带每一步的关系,可以利用OQGRAPH返回的path列(逗号分隔的节点序列),通过关联原始表来拼接关系:

SELECT 
  g.origid,
  g.destid,
  g.path,
  GROUP_CONCAT(pr.relationship ORDER BY FIND_IN_SET(pr.origid, g.path)) AS path_relationships
FROM people_graph g
JOIN people_relationships pr 
  ON FIND_IN_SET(pr.origid, g.path) > 0 
  AND FIND_IN_SET(pr.destid, g.path) = FIND_IN_SET(pr.origid, g.path) + 1
WHERE g.latch = 'dijkstras' 
  AND g.origid = 1
GROUP BY g.origid, g.destid, g.path;

举个例子,假设到节点5的路径是1,2,3,4,5,这个查询会返回friend,friend,friend,father这样的关系序列,清晰展示整条路径的关系链。

注意事项

  • 如果你创建OQGRAPH表时设置了directed=1(单向图),要确保原始关系的方向和查询需求匹配;默认directed=0是双向图,适合大多数场景。
  • 若你的关系表有重复的节点对(比如双向记录),可以在JOIN时加额外条件避免重复。

内容的提问来源于stack exchange,提问作者Mike Reiche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:12:24