【问题标题】:Neo4j TraversalNeo4j 遍历
【发布时间】:2014-05-08 04:59:13
【问题描述】:

我有 2 个问题

1.如果我有如下图

A->B->C->D

A->B->C->E

我的要求是获取路径(从头到尾),这样我就可以遍历节点并根据条件执行一些操作。

我正在使用具有唯一性选项的遍历描述,如下所示。 TraversalDescription td = Traversal.description() .relationships(KNOWS, Direction.OUTGOING) .uniqueness(唯一性.NODE_PATH) .evaluator(Evaluators.excludeStartPosition());

我期待以下结果

A->B->C->D

A->B->C->E

但我得到了以下结果。我尝试了 NODE_PATH 和 NODE_GLOBAL。

A->B

A->B->C

A->B->C->D

A->B->C->E

2.清理不再需要的旧节点最有效的方法是什么(基于时间戳)?我有 2 个选择 1.从头到尾遍历节点,收集可以删除的节点id。然后遍历列表并删除节点及其关系/节点 2. Cypher-query删除符合日期条件的节点和关系

提前非常感谢!

【问题讨论】:

  • 你能发布你的代码吗?
  • @BtySgtMajor - 请参阅我的原始帖子,其中添加了 TraversalDescription 代码。提前致谢!

标签: neo4j traversal


【解决方案1】:

回答 (1) 唯一性控制在遍历期间将(重新)访问哪些节点/关系。但是,它不控制将哪些路径返回到 Path 迭代器。您必须在 Evaluator 中对这种行为进行编码。在您的情况下,它可能是基于路径长度或末端节点上的特定标准的评估器,例如:

// 对于 A->B->C->D Evaluators.atDepth(3)

// 用于返回结束节点具有属性“bla”的路径 新的评估者(){ 公共评估评估(路径路径){ return Evaluation.ofIncludes(path.endNode().hasProperty("bla")); } }

不幸的是,没有内置方法可以仅获取它在每个分支中访问的最长路径。实际上,这将是一个不错的功能。

【讨论】:

  • 要获得最长的密码路径,请参阅这个问题:stackoverflow.com/questions/19764527/…
  • 感谢 Mattias Persson 抽出时间回复。目前我正在使用它的关系手动遍历节点,以避免多次遍历同一个节点。还有其他有效的遍历节点的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2012-10-19
相关资源
最近更新 更多