【问题标题】:Retrieve all paths from a node检索节点的所有路径
【发布时间】:2016-05-13 10:21:45
【问题描述】:

我正在使用 OrientDB 社区版 2.1.16。

这是我的数据图表:

我正在尝试使用以下方法检索给定节点的所有路径:

select $path from (traverse out('E1') from #13:5)   

但我得到的却很奇怪:

我原以为通过二级节点 (#13:1,#13:2,#13:3) 的每条路径都会到达根节点 (#13:0)。 比如:

(#13:5).out[0](#13:4).out[0](#13:1).out[0](#13:0)
(#13:5).out[0](#13:4).out[1](#13:2).out[0](#13:0)
(#13:5).out[0](#13:4).out[2](#13:3).out[0](#13:0)

这是正确的还是什么?

如果是,是否有可能得到这个结果? 我的意思是有一条从#13:5 到#13:0 的完整路径通过二级节点。

谢谢

【问题讨论】:

    标签: orientdb


    【解决方案1】:

    你得到的结果取决于策略有没有遍历,你可以设置两种类型:DEPTH_FIRST,默认,和BREADTH_FIRST。我想也许你对这两种策略感兴趣。有关更多信息,您可以查看此link

    DEPTH_FIRST 策略

    这是 OrientDB 用于遍历的默认策略。它在回溯之前尽可能沿着每个分支进行探索。它是使用递归实现的。要了解更多信息,请查看深度优先算法。下面是使用 DEPTH_FIRST 策略遍历图时执行的有序步骤:

    深度优先树

    BREADTH_FIRST 策略

    它检查所有相邻节点,然后依次检查每个相邻节点,检查未访问的相邻节点,依此类推。将 BREADTH_FIRST 与等效但内存效率更高的迭代深化 DEPTH_FIRST 搜索进行比较,并与 DEPTH_FIRST 搜索进行对比。要了解更多信息,请查看广度优先算法。下面是使用 BREADTH_FIRST 策略遍历图时执行的有序步骤:

    广度优先树

    【讨论】:

      【解决方案2】:

      使用您的查询

      select $path from (traverse out('E1') from #13:5)
      

      您获得了相对于遍历的每个结果的路径,您可以通过添加 * 来验证这一点

      select *,$path from (traverse out('E') from #9:5)
      

      通过这种方式,您可以获得遍历的所有顶点以及从起始节点到达那里的路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多