2016-10-20 7 views
6

В обходном графике я хочу только рассмотреть ребра, у которых есть свойство, равное свойству одного из ребер, посещенных на предыдущем этапе обхода.Обход графа Gremlin, который использует предыдущее значение свойства edge для фильтрации более поздних ребер

Я нашел http://tinkerpop.apache.org/docs/current/recipes/#traversal-induced-values, но это, кажется, работает только для одного объекта, в моем случае мне нужно изменить значение, когда я пересекаю. Например, начиная с V1, у которого есть исходящие ребра (E1, E2, E3 ...), я хочу пересечь E1 на V2, а затем пересечь любое ребро из V2, где edge.property (x) == E1.property (x), и сделать то же самое для всех краев из V1 (E2, E3, ...)

Я не могу найти документацию, которая поддерживает способ сделать это в Гремлине, возможно ли это?

ответ

5

Хорошо, давайте создадим пример графа первый:

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] 

Теперь у нас есть простой график, где два ребра идут от v1 до v2 с собственностью значения 10 и 20. 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

 Смежные вопросы

  • Нет связанных вопросов^_^