有没有办法将遍历与具体图解耦并将其应用于多个图?
Is there way to decouple a traversal from a concrete graph and apply it to multiple graphs?
我想要一个遍历步骤的抽象描述,我可以自由地将其应用于多个图,但遍历实例似乎是有状态的,不可重用。
我正在寻找类似的东西:
GraphTraversal findMarko = __.has("name", "marko"); //Does Marko exist?
GraphTraversalSource g1 = ...;
GraphTraversalSource g2 = ...;
g1.V().where(findMarko).hasNext(); //Does Marko exist in g1?
g2.V().where(findMarko).hasNext(); //Does Marko exist in g2?
但这会导致:
java.lang.IllegalStateException: The traversal strategies are complete and the traversal can no longer be modulated
这在某种程度上可行吗?它甚至有意义吗?
我需要这个的原因是我正在处理以完全相同的方式查询的数千个小图。我将抽象规则从一些 DSL 转换为 Gremlin,并想跳过为每个图形重做此步骤。拥有一个可重用(或可克隆)的遍历实例将解决这个问题。
我正在寻找的方法称为 match
。它提供了一种以声明方式查询图的方法。它需要一个匿名遍历(有用的关键字!这是 Gremlin 的名字,我称之为遍历步骤的抽象描述)并寻找从给定点数:
GraphTraversal findMarko = __.has("name", "marko"); //Does Marko exist?
GraphTraversalSource g1 = ...;
GraphTraversalSource g2 = ...;
g1.V().match(findMarko).hasNext(); //Does Marko exist in g1?
g2.V().match(findMarko).hasNext(); //Does Marko exist in g2?
我想要一个遍历步骤的抽象描述,我可以自由地将其应用于多个图,但遍历实例似乎是有状态的,不可重用。
我正在寻找类似的东西:
GraphTraversal findMarko = __.has("name", "marko"); //Does Marko exist?
GraphTraversalSource g1 = ...;
GraphTraversalSource g2 = ...;
g1.V().where(findMarko).hasNext(); //Does Marko exist in g1?
g2.V().where(findMarko).hasNext(); //Does Marko exist in g2?
但这会导致:
java.lang.IllegalStateException: The traversal strategies are complete and the traversal can no longer be modulated
这在某种程度上可行吗?它甚至有意义吗?
我需要这个的原因是我正在处理以完全相同的方式查询的数千个小图。我将抽象规则从一些 DSL 转换为 Gremlin,并想跳过为每个图形重做此步骤。拥有一个可重用(或可克隆)的遍历实例将解决这个问题。
我正在寻找的方法称为 match
。它提供了一种以声明方式查询图的方法。它需要一个匿名遍历(有用的关键字!这是 Gremlin 的名字,我称之为遍历步骤的抽象描述)并寻找从给定点数:
GraphTraversal findMarko = __.has("name", "marko"); //Does Marko exist?
GraphTraversalSource g1 = ...;
GraphTraversalSource g2 = ...;
g1.V().match(findMarko).hasNext(); //Does Marko exist in g1?
g2.V().match(findMarko).hasNext(); //Does Marko exist in g2?