如何使用GremlinPipeline获取自循环的路径?

时间:2013-01-03 17:14:06

标签: graph-databases gremlin

我正在使用允许自循环的网络(即,一些边缘具有与头部和尾部相同的顶点)。假设图表g有3个顶点(adambillcid),以及reports[adam-reports->bill]类型的3个边, [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中,可以轻松检索自循环,因此:

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

但是,我正在尝试使用Java中的GremlinPipeline做同样的事情而没有成功。如何构建有效的GremlinePipeline来执行上述操作?

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

1 个答案:

答案 0 :(得分:1)

如果您只想找到自循环边,请执行以下操作:

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

鉴于您上面的TinkerGraph示例,输出为:

gremlin> g.E.filter{it.inV == it.outV}
==>e[2][adam-reports->adam]