【问题标题】:How to getting paths that are self-loops using GremlinPipeline?如何使用 GremlinPipeline 获取自循环路径?
【发布时间】:2013-01-03 17:14:05
【问题描述】:

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

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()); 

【问题讨论】:

    标签: graph-databases gremlin


    【解决方案1】:

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

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

    给定上面的 TinkerGraph 示例,输出为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-14
      • 2020-11-14
      • 1970-01-01
      • 2015-07-14
      • 2019-07-06
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      相关资源
      最近更新 更多