【发布时间】:2018-03-15 20:58:14
【问题描述】:
我使用 Neo4J 作为我的底层 GraphDB,在我的 Java 应用程序中使用 Tinkerpop 3.3.1。我使用 Neo4JGraph.open ("/tmp/filename") 在 Java 中创建图形,然后从那里我只使用 Tinkerpop Java API 创建节点、边和运行遍历。
我想在我的 Tinkerpop 图上执行 Dijkstra 最短路径。 Neo4J 是我的底层 GraphDB,内置了这个算法,所以我想使用它。我使用 make this call 来获取 Neo4J 图形,并从中获取一些 Neo4JNode 类型。
Neo4jGraphAPI neo4J = this.graphPV.getBaseGraph();
Neo4jNode start = neo4J.getNodeById(1);
Neo4jNode end = neo4J.getNodeById(2);
这可行,但现在我不确定下一步该做什么。我想我会将这些节点传递给 Neo4J 路径查找器,但 findSinglePath 方法采用 Node 类型,而不是基于 Tinkerpop 的 Neo4JNode。我尝试了铸造,这引发了异常。我可以将 Tinkerpop Neo4JNode 转换为底层 Neo4J API 将接受的 Neo4J 节点类型吗?
dijkstraPathFinder = GraphAlgoFactory.dijkstra(expander, costEvaluator );
WeightedPath path = dijkstraPathFinder.findSinglePath((Node)start, (Node)end );
结果:
警告:服务异常 java.lang.ClassCastException: org.neo4j.tinkerpop.api.impl.Neo4jNodeImpl 不能转换为 org.neo4j.graphdb.Node
【问题讨论】: