Гремлин: добавление ребер между узлами с одинаковым свойством


Я новичок в Гремлин. Я пытаюсь построить график на графике DSE с помощью Gremlin. Я могу создавать вершины:

a = graph.addVertex(label, 'label1', 'key', 1)
b = graph.addVertex(label, 'label1', 'key', 2)
c = graph.addVertex(label, 'label2', 'key', 1)
d = graph.addVertex(label, 'label2', 'key', 2)

Теперь я ищу автоматическое добавление ребер между двумя узлами с разными метками, где совпадает свойство «ключ» (т.е. создать и ребро между a и c, а также между b и c). Я изо всех сил пытаюсь это сделать.

Я пытался сделать следующее

 g.V().hasLabel("label1").sideEffect{g.V().("label2").has("key",it.key).addEdge("link",it)}

Но я получаю следующую ошибку:

No signature of method: org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser.values() is applicable for argument types: (java.lang.String) values: [key]

Может ли кто-нибудь помочь мне в этом вопросе? Заранее спасибо


person phaidara    schedule 24.05.2017    source источник


Ответы (1)


Вложенные g.V() обычно - плохая идея. Решить проблему можно одним обходом:

g.V().hasLabel("label1").as("a").
  V().hasLabel("label2").as("b").
  where("a", eq("b")).by("key").
  addE("link").from("a").to("b")

Также обратите внимание, что вам нужно разрешить сканирование в DSE Graph, чтобы этот обход работал.

person Daniel Kuppitz    schedule 24.05.2017
comment
Большое спасибо! Это было именно то, что я искал, и это мне очень помогло! - person phaidara; 25.05.2017