Java 小精灵获得共享同一顶点的边

Java 小精灵获得共享同一顶点的边,java,graph,neo4j,gremlin,Java,Graph,Neo4j,Gremlin,我的应用程序有英文的过滤器,我需要将这些过滤器翻译成Gremlin查询。每个过滤器由三部分组成: 顶点类型 #1中顶点的出边标签 从#2中的边传入顶点的名称 任何零件都可以采用字符串“Any”,表示结果中可以包含任何类型、标签或名称。 以现代玩具图为例,我有以下两个过滤器: 个人->创建->任何 人->知道->瓦达斯 上述两个过滤器的评估结果应为: 标记->已创建->lop 马尔科->知道->瓦达斯 而以下两个过滤器: 个人->任何->乔希 人员->已创建->lop 应评估以下边缘: 马尔科->

我的应用程序有英文的过滤器,我需要将这些过滤器翻译成Gremlin查询。每个过滤器由三部分组成:

  • 顶点类型
  • #1中顶点的出边标签
  • 从#2中的边传入顶点的名称
  • 任何零件都可以采用字符串“Any”,表示结果中可以包含任何类型、标签或名称。 以现代玩具图为例,我有以下两个过滤器:

  • 个人->创建->任何
  • 人->知道->瓦达斯
  • 上述两个过滤器的评估结果应为:

  • 标记->已创建->lop
  • 马尔科->知道->瓦达斯
  • 而以下两个过滤器:

  • 个人->任何->乔希
  • 人员->已创建->lop
  • 应评估以下边缘:

  • 马尔科->知道->乔希
  • 标记->已创建->lop
  • 我提出的查询结果与上述所需结果最接近:

    g.E().and(outV().outE().has(label, "created"), outV().outE().has(label, "knows").inV().has("name", "vadas"), outV().has(label, "person"))
    

    上述查询的问题是,它返回从marko输出的所有三条边,而不仅仅是两条所需的边。如何改进查询以仅返回上述两条边?

    此解决方案采用将过滤器与返回结果的遍历分离的方法

    gremlin> Gremlin.version()
    ==>3.3.3
    gremlin> g = TinkerFactory.createModern().traversal()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
    gremlin> g.V().
    ......1>     and(
    ......2>         outE('created'),
    ......3>         out('knows').has('name', 'vadas')
    ......4>     ).
    ......5>     union(
    ......6>         outE('created').inV(),
    ......7>         outE('knows').inV().has('name', 'vadas')
    ......8>     ).
    ......9>     path().by('name').by(label)
    ==>[marko,created,lop]
    ==>[marko,knows,vadas]
    gremlin> g.V().
    ......1>     and(
    ......2>         out().has('name', 'josh'),
    ......3>         out('created').has('name', 'lop')
    ......4>     ).
    ......5>     union(
    ......6>         outE().inV().has('name', 'josh'),
    ......7>         outE('created').inV().has('name', 'lop')
    ......8>     ).
    ......9>     path().by('name').by(label)
    ==>[marko,knows,josh]
    ==>[marko,created,lop]