【问题标题】:Neo4J Traversal Skipping Relationship TypesNeo4J 遍历跳过关系类型
【发布时间】:2014-12-12 19:17:28
【问题描述】:

我正在 Neo4J 中使用我自己的评估器执行自定义遍历。遍历中有两个节点,通过两种不同的关系连接。我看到的是在遍历过程中只有两个关系中的一个会被遍历。

但是,我的自定义评估会根据两种关系是否存在而改变其行为。

似乎在遍历过程中,Neo4J 维护了一组访问过的节点,如果候选路径结束于已经访问过的节点,则该路径永远不会发送给我的评估者。有没有解决的办法?如何让自定义评估器检查节点的所有可能路径?

这是一个简单的例子:

假设图形如下所示:

             E----D----A====B----C

遍历从 A 开始。A 有两种不同的关系将它与 B 联系起来(两种不同的类型)。其余所有节点仅通过 1 个关系连接。评估器的目标是返回 A-D、A-B 和 B-C,而不是 D-E。 B-C有效的确定来自于A和B之间存在两种关系这一事实。

如何解决?

【问题讨论】:

    标签: java neo4j


    【解决方案1】:

    您可能需要更仔细地考虑您的用例。

    一个建议是,当您使用the traversal framework in java 时,基本上您可以构建一个TraversalDescription,然后通过关系而不是通过路径或节点遍历从它返回的内容。如果您的主要抱怨是每个节点只被访问一次,您可以将 TraversalDescription 更改为指定 RELATIONSHIP_GLOBAL 以保证所有关系都将被遵循,无论这是否会导致您多次访问一个节点。

    更广泛地说,遍历器不会多次遍历相同的材料,因为如果他们这样做了,您需要非常小心地指定终止条件。如果多次点击某些节点或关系是可以的,那么你什么时候知道你已经完成了?

    【讨论】:

    • 谢谢弗罗伯! TraversalDescription 上唯一性命令的链接正是我所需要的。它正在按我现在的需要工作。停止的标准实际上比我上面给出的例子要复杂得多。这一切都在我的自定义评估器内部处理。我的评估器在考虑是否停止时同时使用最后一个关系和最后一个节点,并且由于现在保证关系是唯一的,因此它不会回溯任何步骤。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多