0

我有一个依赖关系图:

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)来解决这个问题,但我就是无法让它工作。这甚至可能吗,还是我必须用多个语句来解决这个问题?

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

提前致谢

4

2 回答 2

1

值得一提的是,这里的 gremlin-users 组讨论/回答了这个问题:

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

于 2013-03-28T21:01:15.693 回答
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 }
于 2013-03-29T17:20:38.123 回答