Java Вывод GraphTraversal Запрос Gremlin - PullRequest
1 голос
/ 07 мая 2020

Как вывести запрос Gremlin из объекта Java GraphTraversal? Вывод по умолчанию (graphTraversal.toString()) выглядит как [HasStep([~label.eq(brand), name.eq(Nike), status.within([VALID])])], что нелегко прочитать.

Ответы [ 2 ]

5 голосов
/ 07 мая 2020

Gremlin предоставляет класс GroovyTranslator, чтобы помочь в этом. Вот пример.

// Simple traversal we can use for testing a few things
Traversal t = 
  g.V().has("airport","region","US-TX").
        local(values("code","city").
        fold());


// Generate the text form of the query from a Traversal
String query;
query = GroovyTranslator.of("g").
        translate(t.asAdmin().getBytecode());

System.out.println("\nResults from GroovyTranslator on a traversal");
System.out.println(query);

Это взято из набора примеров, расположенных здесь: https://github.com/krlawrence/graph/blob/master/sample-code/RemoteWriteText.java

2 голосов
/ 08 мая 2020

Вы можете использовать метод getByteCode() для DefaultGraphTraversal, чтобы получить выходной запрос gremlin.

Например, рассмотрим следующий график

 Graph graph = TinkerGraph.open();
        Vertex a = graph.addVertex(label, "person", "name", "Alex", "Age", "23");
        Vertex b = graph.addVertex(label, "person", "name", "Jennifer", "Age", "20");
        Vertex c = graph.addVertex(label, "person", "name", "Sophia", "Age", "22");
        a.addEdge("friends_with", b);
        a.addEdge("friends_with", c);

Получите обход графика следующим образом:

        GraphTraversalSource gts = graph.traversal();
        GraphTraversal graphTraversal = 
        gts.V().has("name","Alex").outE("friends_with").inV().has("age", P.lt(20));

Теперь вы можете получить обход в виде строки как:

 String traversalAsString = graphTraversal.asAdmin().getBytecode().toString();

Это дает вам вывод как:

[[], [V(), has(name, Alex), outE(friends_with), inV(), has(age, lt(20))]]

Это гораздо более читабельно, почти как тот, который вы указали в качестве запроса. Теперь вы можете изменить / проанализировать строку, чтобы получить фактический запрос, если вы хотите, например, заменить [,], добавив объединение их с ., как в реальном запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...