GraphDB无向图路径搜索是否支持忽略三元组边方向问询
GraphDB 9.9 无向图路径查询方案
首先明确结论:完全不需要为每条边新增反向副本,就可以实现忽略边方向的无向路径查询。
GraphDB的路径检索功能兼容SPARQL标准的属性路径语法,你只需要在路径查询的谓词配置中同时匹配正向和反向谓词即可:
- SPARQL中用
^标记反向谓词,用|表示谓词的或逻辑,把两者组合就能让路径遍历同时支持沿边的正向、反向跳转 - 该写法对最短路径、环路检测等所有GraphDB内置路径函数都生效
比如社交网络场景下的双向关注关系查询,假设关系谓词为ex:follow,最短路径查询示例如下:
PREFIX ex: <http://example.com/social/> SELECT ?shortestPath ?pathLength WHERE { # 定义路径的起止节点 BIND(ex:userZhangSan AS ?startNode) BIND(ex:userLiSi AS ?endNode) # 配置无向路径规则:同时匹配正向、反向的ex:follow关系 ?shortestPath <http://www.ontotext.com/graphdb/path/shortest> (?startNode ?endNode (ex:follow|^ex:follow)) . ?shortestPath <http://www.ontotext.com/graphdb/path/length> ?pathLength . }
额外注意事项
- 如果需要同时支持多个谓词的无向查询,直接把所有谓词及其反向形式放到
()的或逻辑组合里即可 - 大数据量场景下建议提前为用到的谓词配置对应的三元组索引,查询性能和提前存储反向边的方案基本持平
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

