从节点检索所有路径

时间:2016-05-13 10:21:45

标签: orientdb

我正在使用OrientDB Community Edition 2.1.16。

这是我的数据图表:

enter image description here

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

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

但我得到的却很奇怪:

enter image description here

我原本预计通过第二级节点(#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的完整路径通过第二级节点。

由于

2 个答案:

答案 0 :(得分:0)

您获得的结果取决于策略是否具有遍历,您可以设置两种类型:DEPTH_FIRST,默认值和BREADTH_FIRST。我想也许你对这两种策略很感兴趣。有关详细信息,请查看此link

DEPTH_FIRST策略

这是OrientDB用于遍历的默认策略。它在回溯之前尽可能地沿着每个分支进行探索。它是使用递归实现的。要了解更多关于Depth-First算法的信息。在使用DEPTH_FIRST策略遍历图表时执行的有序步骤之下:

深度优先树 enter image description here

BREADTH_FIRST策略

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

广度优先树 enter image description here

答案 1 :(得分:0)

使用您的查询

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

您获得相对于遍历的每个结果的路径,您可以通过添加*

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

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