2016-10-20 16 views
6

Bir grafik geçişinde yalnızca geçişteki bir önceki adımda ziyaret edilen kenarlardan birine ait bir özelliğe sahip olan bir özelliği olan kenarları dikkate almak istiyorum.Daha sonraki kenarları filtrelemek için önceki kenar özellik değerini kullanan Gremlin grafik geçişi

http://tinkerpop.apache.org/docs/current/recipes/#traversal-induced-values buldum, ancak bu yalnızca tek bir nesne için çalışıyor gibi görünüyor, benim durumumda, geçiş yaparken değiştirilecek değere ihtiyacım var. Örneğin giden kenarlara (E1, E2, E3 ...) sahip olan V1'den başlamak, E1'den V2'ye geçmek ve sonra, herhangi bir kenar boyunca V2'den geçmek ve edge.property (x) == E1.property (x)) ve V1 (E2, E3, ...)

'un tüm kenarları için aynı işlemi yapın. Bunu Gremlin'de yapmanın bir yolunu destekleyen herhangi bir belge bulamıyorum, bu mümkün mü?

cevap

5

Tamam, ilk örnek grafiği yapalım: Biz mülkiyet 10 değerleri ve 20. v2 biri iki giden kenarları ile v2'ye iki kenarları v1 gitmek Basit bir grafik var Şimdi

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] 

kenarın 10'luk bir özellik değeri vardır. Bu, sorgunun geçmesi gereken kenardır ve sonuçta elde edilen köşe noktası v3 olur.

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 tam örnek: http://gremlinbin.com/bin/view/5809c1fc0626b

bunu

bir yolu match()-step ile

İlgili konular