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