我正在使用OrientDB Community Edition 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的完整路径通过第二级节点。
由于
答案 0 :(得分:0)
您获得的结果取决于策略是否具有遍历,您可以设置两种类型:DEPTH_FIRST,默认值和BREADTH_FIRST。我想也许你对这两种策略很感兴趣。有关详细信息,请查看此link。
DEPTH_FIRST策略
这是OrientDB用于遍历的默认策略。它在回溯之前尽可能地沿着每个分支进行探索。它是使用递归实现的。要了解更多关于Depth-First算法的信息。在使用DEPTH_FIRST策略遍历图表时执行的有序步骤之下:
BREADTH_FIRST策略
它检查所有相邻节点,然后依次为每个邻居节点检查未访问的邻居节点,依此类推。将BREADTH_FIRST与等效但更具内存效率的迭代深度DEPTH_FIRST搜索进行比较,并与DEPTH_FIRST搜索进行对比。要了解更多关于广度优先算法的信息。在使用BREADTH_FIRST策略遍历图表时执行的有序步骤之下:
答案 1 :(得分:0)
使用您的查询
select $path from (traverse out('E1') from #13:5)
您获得相对于遍历的每个结果的路径,您可以通过添加*
select *,$path from (traverse out('E') from #9:5)
通过这种方式,您可以获得遍历的所有顶点以及从起始节点到达的路径。