在 java 中使用 gremlin 获取两个节点之间的所有路径

Fetching all the paths between two nodes using gremlin in java

您好,我是 gremlin 的新手,正在尝试通过查找两个节点之间的所有路径来解决问题。在 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();

谢谢, 萨吉尔

你的查询对我来说意义不大,但描述很有帮助。这是一个示例,使用 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. [marko, lop]
  2. [马可、乔希、洛普]

如果将 Groovy 转换为 Java 是最大的问题,您一定要检查一下: