获取所有在Java中使用的gremlin两个节点之间的路径(Fetching all the pat

2019-10-23 02:29发布

嗨,我还挺新的Gremlin,并试图实现通过寻找两个节点之间的所有路径的一些解决。 在小鬼控制台上简单的查询我能够使用此查询做到:

(Name of the first Node).loop(1){it.loops<100}{true}.has('name', (Name of the second node)).path{it.name}

但是,当我试图获取从Java方法我到的问题,如海:

- 在哪里正好把查询不知道? - 什么数据结构将有权获得行的阵列。 - 如何收集从图中的第一节点和第二节点。

在这里,我试图用这个来进行,但没有线索:

  Graph g = new OrientGraph(AppConstants.GRAPH_LOCATION);
         List<String> vertexList = new ArrayList<String>();
         try{
             for (Vertex v : g.getVertices()) {
                    String vertexName = v.getProperty("name");
                    vertexList.add(vertexName);
                }    
             return vertexList;
         } catch (final Exception ex) {
             throw new AppSystemException(ex);
         }finally{
             g.shutdown();

谢谢,萨厄尔

Answer 1:

您的查询没有多大意义,我,但描述的帮助。 下面是一个例子,使用TinkerGraph,找到之间的所有路径markolop

final Graph g = TinkerGraphFactory.createTinkerGraph();
List<List> names = new ArrayList<>();
new GremlinPipeline<Vertex, ArrayList<Vertex>>(g).V().has("name", "marko").as("x").out().loop("x",
        new PipeFunction<LoopPipe.LoopBundle<Vertex>, Boolean>() {
            @Override
            public Boolean compute(LoopPipe.LoopBundle<Vertex> loopBundle) {
                return loopBundle.getLoops() < 100;
            }
        }, new PipeFunction<LoopPipe.LoopBundle<Vertex>, Boolean>() {
            @Override
            public Boolean compute(LoopPipe.LoopBundle<Vertex> loopBundle) {
                return "lop".equals(loopBundle.getObject().getProperty("name"));
            }
        }
).has("name", "lop").path(new PipeFunction<Vertex, String>() {
    @Override
    public String compute(final Vertex vertex) {
        return vertex.getProperty("name");
    }
}).fill(names);

names ,然后列表将充满了以下2项:

  1. [马尔科,垂耳]
  2. [马尔科,约什,垂耳]

如果转换的Groovy到Java是最大的问题,你一定要检查了这一点: 转换精怪Groovy来精怪的Java



文章来源: Fetching all the paths between two nodes using gremlin in java