【问题标题】:Shortest path in one direction "IN" or "OUT" in Neo4jNeo4j中一个方向“IN”或“OUT”的最短路径
【发布时间】:2016-03-14 09:51:47
【问题描述】:

我有兴趣找到最短的路径,但仅限于一个方向。例如,我有以下图表:the graph

当我考虑“传入”方向时,“A 和 D”之间的最短路径应该是“A-C-D”。如果我考虑“OUTGOING”方向,最短路径应该是“A-F-E-D”

根据我的实现,只能考虑“BOTH”方向:

   PathExpander<Object> expander =   Traversal.pathExpanderForAllTypes(Reldir);  
   PathFinder<Path> finder=GraphAlgoFactory.shortestPath(expander,maxDepth, 1);        
   Path path = finder.findSinglePath("A","D");

当我使用 Reldir="IN" 时,我得到了这个异常:

  Java.lang.NullPointerException at org.neo4j.kernel.Traversal.pathToString(Traversal.java)

有什么方法可以像 OrientDB 一样在 Neo4j 中使用“IN”或“OUT”方向?

【问题讨论】:

    标签: search neo4j shortest-path


    【解决方案1】:

    尝试 INCOMING 而不是 IN。 Source

    【讨论】:

      【解决方案2】:

      我已经实施了解决方案。但是,我不确定这是否是最好的方法:

      Direction Reldir = Direction.valueOf(relation_direction); 
      PathExpander<Object> expander = Traversal.pathExpanderForAllTypes(Reldir);  
      PathFinder<Path> finder = GraphAlgoFactory.shortestPath(expander, maxDepth,1);         
      Path path = finder.findSinglePath(first_node, second_node); 
      PathPrinter pathPrinter = new PathPrinter("name");
      Traversal.pathToString(path, pathPrinter); 
      
      static class PathPrinter implements Traversal.PathDescriptor<Path> {
      private final String nodePropertyKey;
      
          public PathPrinter(String nodePropertyKey) {
              this.nodePropertyKey = nodePropertyKey;
          }
      
          public String nodeRepresentation(Path path, Node node) 
           {
            System.out.println(node.getProperty(nodePropertyKey, "").toString()+" ");
           }
      

      任何有效的解决方案?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多