Не думаю, что вам нужен какой-либо из методов asAdmin()
.Вместо того, чтобы создавать анонимные обходы, чтобы попытаться добавить к родительскому обходу, я думаю, что было бы лучше просто обойти родительский экземпляр GraphTraversal
и просто добавить к нему необходимые шаги:
private static GraphTraversal addFilters(GraphTraversal t) {
return t.hasLabel("mylabel");
}
...
GraphTraversal<Vertex, Vertex> t = g.V();
t = addFilters(t);
List<Vertex> r = t.toList();
Существуетпричина, по которой ваш подход не работает с удаленными обходами и связан с тем, как байт-код Gremlin строится за кулисами.Использование методов asAdmin()
позволяет обойти некоторые внутренние операции, и эти части обхода не отправляются на сервер - это все равно простой способ объяснить это.Если вам абсолютно необходимо создать анонимные части обхода таким образом, а затем добавить их именно таким образом, то, я думаю, я бы сделал:
GraphTraversal<Vertex, Vertex> addMe = __.hasLabel("mylabel");
GraphTraversal<Vertex, Vertex> t = g.V();
List<Vertex> r = t.filter(addMe).toList();
Мне не особенно нравится этот подход, потому что в зависимости от того, что вы 'Если вы делаете это, вы можете обмануть стратегии обхода JanusGraph, которые оптимизируют ваши обходы, и вы потеряете некоторые оптимизации производительности.Мне также не очень нравится стиль - просто кажется более естественным передавать GraphTraversal
функциям, которые должны изменить его с помощью новых шагов.Вы также можете найти эту информацию о повторном использовании обхода полезной.