Как получить пути, которые являются петлями с помощью GremlinPipeline?

Я работаю с сетью, которая допускает циклы (т. Е. Некоторые ребра имеют ту же вершину, что и голова, и хвост). Предположим, что граф g имеет 3 вершины (adam, bill и cid) и 3 ребра типа reports ([adam-reports->bill], [bill-reports->cid] и [adam-reports->adam]), последнее из которых является единственным рефлексивным ребром в этом примере.

gremlin> g = new TinkerGraph();
gremlin> adam = g.addVertex('adam');
gremlin> bill = g.addVertex('bill');
gremlin> cid = g.addVertex('cid');
gremlin> g.addEdge(adam, bill, 'reports');
gremlin> g.addEdge(bill, cid, 'reports');
gremlin> g.addEdge(adam, adam, 'reports'); 

В гремлине петля (петли) может быть легко извлечена, таким образом:

gremlin> g.V.sideEffect{v=it}.outE('reports').inV.filter{it==v}.path
gremlin> [v[adam], e[2][adam-reports->adam], v[adam]]

Однако я безуспешно пытаюсь сделать то же самое, используя GremlinPipeline в Java. Как я могу создать действующий GremlinePipeline для выполнения вышеуказанного?

GremlinPipeline pp = new GremlinPipeline();
// Add various pies to pp to get a valid pipeline
pp.setStarts(g.getVertices()); 

person user1030497    schedule 03.01.2013    source источник


Ответы (1)


Если вы хотите найти только края петли, сделайте следующее:

g.E.filter{it.inV == it.outV}

Учитывая приведенный выше образец TinkerGraph, результат будет следующим:

gremlin> g.E.filter{it.inV == it.outV}
==>e[2][adam-reports->adam]
person Marko A. Rodriguez    schedule 03.01.2013