2

我想对遍历步骤进行抽象描述,我可以自由地将其应用于多个图,但遍历实例似乎是有状态的,并且不可重用。

我正在寻找类似的东西:

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:遍历策略已完成,无法再调制遍历

这在某种程度上可行吗?它甚至有意义吗?

我需要这个的原因是我正在处理以完全相同的方式查询的数千个小图。我将抽象规则从一些 DSL 转换为 Gremlin,并且想跳过为每个图重做这一步。拥有一个可重用(或可克隆)的遍历实例可以解决这个问题。

4

1 回答 1

0

我正在寻找的方法称为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?
于 2021-08-18T11:41:30.507 回答