0

グラフがあります(下の写真を参照)。私は A からグレムリンを使用し、エッジ「impacts」と「similarTo」に続いてすべてのツリーをループする必要があります。

だから私は次のようなものが必要です:

g.v(A.id).out('impacts', 'similarTo').loop(1){it.loops < 4}{true}

このクエリの問題は、関係 "similarTo" が、アプリケーションがその時点でどのようにデータを格納しているかに応じて、エッジの外に出たり、エッジの中にあったりすることです (グラフを参照)。一方、「影響」関係にはアウトエッジしか必要ないため、単純に「両方」(gv(A.id).both('impacts', 'similarTo')...) を使用してエッジを取得することはできません。一部の頂点 (たとえば 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}

助言がありますか?

4

2 に答える 2

0

Gremlin の経験はありませんが、Cypher では次のように実行できます。

START n=node({id})
MATCH p=n-[:impacts|similarTo*3]-m
RETURN p

このクエリは、タイプ impacts および similarTo の深さ 3 の一方向リレーションシップを含むすべてのパスを返します。

于 2013-05-13T14:36:50.530 に答える