首页 > 解决方案 > Gremlin Java 查询以合并两个节点

问题描述

假设我有两个节点 - A 和 B。

我正在尝试使用 gremlin - Java 将这两个节点合并到一个图中。能够使用此 SO 答案生成查询 - https://stackoverflow.com/a/46435070

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需要 type 的参数,Traversal__.select("x").select(Column.keys)返回 type 的结果GraphTraversal

替换为String.valueOf(.addE(__.select("x").select(Column.keys)))不会产生预期的结果。

任何帮助表示赞赏!

标签: gremlinjanusgraph

解决方案


我想你可能只是有一个泛型问题?是在 3.3.1 中添加的,但在这种情况下addE(Traversal<?, String>)你试图给它一个我应该是的GraphTraversal<S, Collection<E2>>位置。您应该能够通过一些类型擦除来解决它 - 只需转换为:E2StringTraversal

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

推荐阅读