TinkerPop Gremlin Повторяйте, пока не исчезнут края - PullRequest
0 голосов
/ 12 июля 2020

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

Я пробовал

gV (2 ) .repeat (out (). not (hasLabel ('регион', 'бизнес')). simplePath ()). until (outE (). count () == 0)

I не мог понять, что передать до тех пор, пока все примеры, которые я обнаружил, передавали "имеет" или подобное тестирование свойства на вершине.

Я пытаюсь использовать консоль Gremlin, но это также понадобится для работы из приложения java.

Пример графика:

graph = TinkerGraph.open()
g = graph.traversal()


a1 = g.addV("acc").property(id, 1).next()
a2 = g.addV("acc").property(id, 2).next()
a3 = g.addV("acc").property(id, 3).next()
a4 = g.addV("acc").property(id, 4).next()
a5 = g.addV("acc").property(id, 5).next()

sfid_a = g.addV("sfid").property(id, "a").next()
sfid_b = g.addV("sfid").property(id, "b").next()

cust_x = g.addV("cust").property(id, "x").next()
cust_y = g.addV("cust").property(id, "y").next()

ind = g.addV("region").property(id, "in").next()
usa = g.addV("region").property(id, "us").next()

aws = g.addV("business").property(id, "aws").next()

g.addE('has_payer').from(a2).to(a4)

g.addE('has_sfid').from(a5).to(sfid_b)
g.addE('has_sfid').from(a3).to(sfid_a)
g.addE('has_sfid').from(a4).to(sfid_a)


g.addE('has_cust').from(sfid_b).to(cust_x)
g.addE('has_cust').from(sfid_a).to(cust_x)
g.addE('has_cust').from(cust_x).to(cust_y)
g.addE('has_cust').from(a1).to(cust_y)


g.addE('has_business').from(a1).to(aws)
g.addE('has_business').from(a2).to(aws)
g.addE('has_business').from(a3).to(aws)
g.addE('has_business').from(a4).to(aws)
g.addE('has_business').from(a5).to(aws)


g.addE('has_region').from(a1).to(ind)
g.addE('has_region').from(a1).to(usa)
g.addE('has_region').from(a2).to(ind)
g.addE('has_region').from(a2).to(usa)
g.addE('has_region').from(a3).to(ind)
g.addE('has_region').from(a4).to(usa)
g.addE('has_region').from(a5).to(ind)
g.addE('has_region').from(a5).to(usa)

1 Ответ

0 голосов
/ 12 июля 2020

Кажется, я могу использовать шаг «is» для фильтрации скаляров

g.V(2).repeat(out().not(hasLabel('region', 'business')).simplePath()).until(outE().count().is(0))
g.V(2).repeat(out().not(hasLabel('region', 'business')).simplePath()).until(outE().count().is(gt(5)))
...