Gremlin Java запрос на объединение двух узлов - PullRequest
1 голос
/ 28 февраля 2020

Допустим, у меня есть два узла - A и B.

Я пытаюсь объединить эти два узла в графе, используя gremlin - Java. Не удалось сгенерировать запрос, используя этот ответ SO - { ссылка }

g.V(parentNode).union(identity(), janusClient.g.V(aliasNode))
  .unfold()
  .sideEffect(properties().group("p").by(T.key).by(value()))
  .sideEffect(__.outE().group("o").by(T.label).by(__.project("p","iv").by(__.valueMap()).by(__.inV()).fold()))
  .sideEffect(__.inE().group("i").by(T.label).by(__.project("p","ov").by(__.valueMap()).by(__.outV()).fold()))
  .sideEffect(__.drop())
  .cap("p","o","i").as("poi")
  .addV().as("u")
  .sideEffect(
      __.select("poi").select("p").unfold().as("kv")
        .select("u").property(__.select("kv").select(Column.keys), __.select("kv").select(Column.values)))
  .sideEffect(
      __.select("poi").select("o").unfold().as("x").select(Column.values)
        .unfold().addE(__.select("x").select(Column.keys)).from(__.select("u")).to(__.select("iv")))
  .sideEffect(
      __.select("poi").select("i").unfold().as("x").select(Column.values)
        .unfold().addE(__.select("x").select(Column.keys)).from(__.select("ov")).to(__.select("u"))).iterate();

Проблема с этой строкой .addE(__.select("x").select(Column.keys)) на последнем шаге sideEffect. Это не компилируется, поскольку .addE ожидает аргумент типа Traversal, в то время как __.select("x").select(Column.keys) возвращает результат типа GraphTraversal.

Замена на String.valueOf(.addE(__.select("x").select(Column.keys))) не дает желаемых результатов.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 02 марта 2020

Думаю, у вас может быть проблема с дженериками? addE(Traversal<?, String>) был добавлен в 3.3.1, но вы пытаетесь дать ему GraphTraversal<S, Collection<E2>>, где E2 Я должен быть String в этом случае. Вы должны быть в состоянии обойти это с небольшим стиранием типа - просто приведите к Traversal:

addE((Traversal) __.select("x").select(Column.keys))
...