2016-10-20 7 views
6

グラフのトラバーサルでは、トラバーサルの前のステップで訪れたエッジのプロパティと同じプロパティを持つエッジのみを考慮する必要があります。Gremlinグラフの横断で、前のエッジプロパティ値を使用して後でエッジをフィルタリングする

私はhttp://tinkerpop.apache.org/docs/current/recipes/#traversal-induced-valuesを見つけましたが、これは単一のオブジェクトでのみ動作するようですが、私の場合はトラバースするために値を変更する必要があります。たとえば、発信エッジ(E1、E2、E3 ...)を持つV1から始まり、E1からV2をトラバースし、V2から任意のエッジに沿って移動したい場合は、edge.property(x)== E1.property(x )、そしてV1(E2、E3、...)のすべての辺について同じことをする

Gremlinでこれを行う方法をサポートしているドキュメントはありませんか?

答えて

5

[OK]を、のは、最初の例のグラフを作成してみましょう:

gremlin> v1 = graph.addVertex('name', 'v1') 
==>v[0] 
gremlin> v2 = graph.addVertex('name', 'v2') 
==>v[2] 
gremlin> v3 = graph.addVertex('name', 'v3') 
==>v[4] 
gremlin> v4 = graph.addVertex('name', 'v4') 
==>v[6] 
gremlin> v1.addEdge('knows', v2, 'property1', 10) 
==>e[8][0-knows->2] 
gremlin> v1.addEdge('knows', v2, 'property1', 20) 
==>e[9][0-knows->2] 
gremlin> v2.addEdge('knows', v3, 'property1', 10) 
==>e[10][2-knows->4] 
gremlin> v2.addEdge('knows', v4, 'property1', 50) 
==>e[11][2-knows->6] 

今、私たちは二つのエッジは、プロパティが10と20 v2は1の2つの発信エッジを持つ値をV1からV2に行く簡単なグラフを持っていますedgeはプロパティ値が10です。これはクエリが通過するエッジであり、結果の頂点はv3です。そうする

一つの方法は、match()-stepである:

g.V(v1).outE().match(
        __.as('e1').values('property1').as('p1'), 
        __.as('e1').inV().as('v2'), 
        __.as('v2').outE().as('e2'), 
        __.as('e2').values('property1').as('p2'). 
         where('p1', eq('p2'))). 
       select('e2').inV().values('name') 
==>v3 

GremlinBinでフル例:http://gremlinbin.com/bin/view/5809c1fc0626b

関連する問題