无法使模式与单个gremlin语句匹配

时间:2013-03-26 19:55:31

标签: neo4j cypher gremlin tinkerpop

我有一个带依赖关系的图表:

dep1 -> dep2 -> ... -> dep3 -> ...
    |                   ^
    +-> dep4            |
    |                   |
    +-------------------+

我正在寻找不必要的依赖关系,即存在直接链接的依赖关系,还有通过子依赖关系的链接。在上面的示例中,链接“dep1 - > dep3”是不必要的。

找到那些的密码声明将是:

start n = node(*)
match n -[:dependency]-> n2,
      n -[:dependency*2..]-> n2
 with n, n2
return distinct id(n), n.name, id(n2), n2.name

我尝试使用单个gremlin语句(使用“table”-step)解决此问题,但我无法使其正常工作。这甚至是可能的还是我必须用多个陈述解决这个问题?

任何提示,提示,想法都将不胜感激。

提前致谢

2 个答案:

答案 0 :(得分:1)

对于它的价值,这个问题在gremlin-users小组中讨论/回答:

https://groups.google.com/forum/?fromgroups=&hl=en#!topic/gremlin-users/N9NYG-aBrvw

答案 1 :(得分:0)

感谢Marko和Stephen,我们提出了这个解决方案:

g.V.transform{
    s-> singleStep = [];
        s.as('origin')
            .out('dependency').aggregate(singleStep)
            .out('dependency')
                .loop(1){ true }{ true }
            .retain(singleStep).as('redundant')
            .dedup()
            .table(new Table(), ['origin', 'redundant']){ it.name + '(' + it.id + ')' }
            .cap().next()
}.filter{ it.size() > 0 }