TinkerPop 3 Gremlin Собирать свойства кромок во время обхода - PullRequest
0 голосов
/ 31 октября 2018

Использование API-интерфейсов TinkerPop 3 Java:

Мой график выглядит так:

james {risk: 'n'} --> chris {risk: 'n'} --> raj {risk: 'n'} --> joanne {risk: 'y'}

The edge label is 'travelledWith' and a property called 'pnrLocator'

Теперь я хочу перейти от Джеймса к вершине, где риск установлен на «у». Попутно я бы хотел собрать свойства вершин и ребер.

Это то, что у меня есть, которое работает только для свойств вершин. Как я могу добавить 'by' и собрать 'pnrLocator' тоже?

GraphTraversal<Vertex, ?> values =
                g.traversal()
                        .V()
                        .has("personId", "james")
                        .repeat(out("travelledWith"))
                        .until(has("risk", "y"))
                        .limit(100)
                        .path()
                        .by("personId");


        values.forEachRemaining(v -> System.out.println(v));

1 Ответ

0 голосов
/ 02 ноября 2018

На шаге path() будут выведены любые элементы, которые пройдут по Гремлину, с учетом предоставленных вами шагов, используя "современный" игрушечный граф TinkerPop:

gremlin> g.V().repeat(out()).emit().path().by("name")
==>[marko,lop]
==>[marko,vadas]
==>[marko,josh]
==>[marko,josh,ripple]
==>[marko,josh,lop]
==>[josh,ripple]
==>[josh,lop]
==>[peter,lop]

Я прошел out(), который возвращает вершины, так что это единственный вывод, который я вижу в выводе пути. Если я немного изменю свой обход, чтобы явно пересечь края (т.е. out() до outE().inV()), тогда я могу сделать это:

gremlin> g.V().repeat(outE().inV()).emit().path().by("name").by('weight')
==>[marko,0.4,lop]
==>[marko,0.5,vadas]
==>[marko,1.0,josh]
==>[marko,1.0,josh,1.0,ripple]
==>[marko,1.0,josh,0.4,lop]
==>[josh,1.0,ripple]
==>[josh,0.4,lop]
==>[peter,0.2,lop]
...