我有图表(见下图)。我使用 A 中的 gremlin,需要在边缘“影响”和“相似”之后循环所有树。
所以我需要类似的东西:
g.v(A.id).out('impacts', 'similarTo').loop(1){it.loops < 4}{true}
这个查询的问题是,关系“similarTo”有时可能在边缘,有时在边缘(见图),这取决于应用程序目前如何存储数据。我不能简单地使用 "both" (gv(A.id).both('impacts', 'similarTo')...) 来检索边缘,因为另一方面我只需要 out edge 来实现“影响”关系。也有可能,某些顶点(例如 C)缺少“similarTo”边,在这种情况下,循环应该只遵循“影响”关系。
最后我尝试了这样的事情,但我认为我用错了,结果不合适:
g.v(A.id).as('x').copySplit(_().out('impacts'), _().both('similarTo')).fairMerge.loop('x'){it.loops < 4}{true}
我也试图在遍历过程中按方向过滤边缘,但它可能不受支持,所以这也不起作用:
g.v(A.id).as('x').bothE.filter{((it.label=='impacts' & it.direction=='out') || it.label=='similarTo')}.bothV.loop('x'){it.loops < 4}{true}
有什么建议么?