Neo4j应该使用哪种遍历算法?

7
我目前正在尝试 Neo4J Koan教程。在Koan06中介绍了Traversal,我感到非常困惑。方法Node.traversal已经过时,应该使用Traversal.traverse。当我尝试使用它时,我发现整个Traversal类也已经过时了。我阅读文档以找出我应该使用什么,但是没有找到任何有用的信息。文档甚至没有提到Traversal已经过时(当然像traversedescription这样的Traversal方法也没有明确说明已经过时)。简单的问题:我应该使用什么来构建TraversalDescription
1个回答

11

Neo4j Traversers由底层的Traversal类构建,其配置通过GraphDatabaseService(在Neo4j 2.0中)作为TraversalDescription提供。

我认为在Neo4J代码中仍然存在遗留的、已弃用的实现。

Traversal有两种类型:

1. 单向遍历

通过调用以下方法进行实例化:

TraversalDescription traversalDescription = graphDatabaseService.traversalDescription()

获得的traversalDescription实际上是一个构建器模式,允许您设置遍历的不同属性。请参阅API

2. 双向遍历

使用双向遍历实例化:

BidirectionalTraversalDescription bidirectionalTraversalDescription = 
      graphDatabaseService.bidirectionalTraversalDescription()

这个 TraversalDescription 有一个起始点和结束点,它们实际上是两个不同的 TraversalDescriptions,并且可以使用类似单向遍历的构建模式来实例化。

例如:

graphDatabaseService
  .bidirectionalTraversalDescription()
    .startSide(graphDatabaseService
      .traversalDescription()
      .depthFirst()
      .uniqueness(Uniqueness.NODE_PATH))
    .endSide(graphDatabaseService
      .traversalDescription()
      .depthFirst()
      .uniqueness(Uniqueness.NODE_PATH))

我使用Scala代码展示了实例化过程,希望您能清楚明白。


实际上,这两种方法都已移动到GraphDatabaseService.(biDirectional)TraversalDescription()中。 - Michael Hunger
正如我之前提到的,整个“Traversal”类已经被弃用。@MichaelHunger的评论明确指出应该使用“GraphDatabaseService”中的“traversalDescription”方法,而不是“Node.traversal()”或“Traversal.traverse()”。 - Rafael T
现在,公案正在进行一些更新(我很快会为Neo4j 2.0推出新版本)。其中一些练习使用了已弃用的代码(至少有两个),因此您可能选择忽略它们。总体而言,完成其他练习仍然可以获得一些价值。 - Jim Webber
@JimWebber 嘿,吉姆。我并不是在抱怨你的Koans测试(我真的很感激)。只是对原始的Neo文档感到困惑。无论如何,很高兴知道你仍在更新它。也许你想添加我今天的PullRequest :) - Rafael T
感谢您更改内容 Rafael,我昨天在尝试Neo4J 2.0.0时也看到了弃用标志,但是我的互联网突然断开了,无法更改。 Neo4J文档有时非常令人困惑,因为调用API的某些方式相当频繁地发生变化,这真的很痛苦。 我记得在1.x版本中花了很长时间才弄清楚它。 - ddem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接