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

标签 java graph-databases orientdb gremlin tinkerpop

嗨,我对 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. [马可,洛普]
  2. [马科、乔希、洛普]

如果将 Groovy 转换为 Java 是最大的问题,那么您绝对应该检查一下:Converting Gremlin Groovy to Gremlin Java

关于java - 在java中使用gremlin获取两个节点之间的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30212204/

相关文章:

java - 如何允许/拒绝来自 Java 中的 XSL 的特定 Java 方法调用?

merge - Neo4j 在大数据集上的 MERGE 命令

graph - 将数据作为数组/列表存储在 neo4j 属性上

java - 尝试与 OrientDB 合作

java - @rid 东方数据库中的哪种数据类型?

graph - 使用 OrientDB ETL 将简单的 csv 文件导入图形的最简单方法

java - 发送一个 Object 类型的对象而不是 String - 多态性

java - MySQL JDBC 驱动程序 5.1.33 - 时区问题

java - 在 try block 中使用 return (Java)

neo4j - 使用 Cypher 在 Neo4j 中的数十万个节点之间创建三元闭包不起作用