[Neo4j] PathFinder.findSinglePath returns null
Andres Taylor
andres.taylor at neotechnology.com
Fri Oct 8 21:46:43 CEST 2010
Hi there,
I've looked over your code, and it doesn't seem like you are doing anything
wrong, AFAICS.
It would be easier to help you if I could run the code, and I would need to
have a copy of your database for that. Could you send a script that loads a
database with data?
Cheers,
Andrés
On Fri, Oct 8, 2010 at 5:30 PM, French, Bernie T. <bfrench at cas.org> wrote:
> Hi Folks,
>
> I just joined the list and have begun my initial explorations of neo4j.
> I've been able to build a simple directed graph database, create a
> TraversalDescription, traverse the graph and write a Pruner.
>
> I then started to explore the graph algorithms, starting with the
> "shortest path" algorithm from the GraphAlgoFactory class. Although I
> can traverse my graph using a Traverser, I cannot seem to be able to get
> a path from using the GraphAlgoFactory.
>
> The path that is always returned by the following statement is always
> null, even though I know the path exists using the Traverser.
>
> path = pathFinder.findSinglePath(startNode, endNode);
>
> Here is the snapshot of my class, first using the Traverser, and then
> trying to use the Graph Algorithms. Any insight into what I'm
> overlooking would be greatly appreciated.
>
> public class FindShortestPath {
>
> public static void main(String[] args) {
>
> String databaseLocation =
> "/home/neo4j/simpleDirectedGraphDb";
> GraphDatabaseService graphDb = new
> EmbeddedGraphDatabase(databaseLocation);
> IndexService indexService = new
> LuceneIndexService(graphDb);
> Transaction tx = graphDb.beginTx();
> PropertyContainer propertyContainer;
> StringBuffer pathBuffer;
> try {
>
> String startName = "Jack";
> String endName = "Jill";
> Node startNode =
> indexService.getSingleNode("NAME", startName);
> Node endNode =
> indexService.getSingleNode("NAME", endName);
> System.out.println("StartNode: " +
> startNode.getProperty("NAME"));
> System.out.println("EndNode: " +
> endNode.getProperty("NAME"));
>
> // Traverse the Graph - Traversing is
> successfull here....
>
> TraversalDescription td = new
> TraversalDescriptionImpl();
> td = td.depthFirst();
> td = td.relationships(RelationshipTypes.LIKES,
> Direction.OUTGOING);
> td = td.relationships(RelationshipTypes.KNOWS,
> Direction.OUTGOING);
> Traverser traverser = td.traverse(startNode);
> Iterator<Path> traversalIterator =
> traverser.iterator();
> int pathCount = 0;
> Path path = null;
> while (traversalIterator.hasNext()) {
> pathCount++;
> path = (Path) traversalIterator.next();
>
> Iterable<Node> nodeIterable =
> path.nodes();
> Iterator<Node> nodeIterator =
> nodeIterable.iterator();
> pathBuffer = new StringBuffer();
> while (nodeIterator.hasNext()) {
> Node node = (Node)
> nodeIterator.next();
>
> pathBuffer.append(node.getProperty("NAME") + "->");
> }
> System.out.println("TRAVERSE: " +
> pathBuffer.toString());
>
> }
>
> // Start Graph Algorithm
>
> StandardExpander expander = new
> OrderedByTypeExpander();
> expander.add(RelationshipTypes.KNOWS,
> Direction.OUTGOING);
> expander.add(RelationshipTypes.LIKES,
> Direction.OUTGOING);
> PathFinder<Path> pathFinder =
> GraphAlgoFactory.shortestPath(expander, 20);
>
> path = pathFinder.findSinglePath(startNode,
> endNode);
>
> /* PATH IS ALWAYS NULL HERE */
>
> if (path != null) {
> Iterator<PropertyContainer> pathIterator
> = path.iterator();
> pathBuffer = new StringBuffer();
> while (pathIterator.hasNext()) {
> propertyContainer =
> (PropertyContainer) pathIterator.next();
> String name = (String)
> propertyContainer.getProperty("NAME");
> pathBuffer.append(name + "->");
> }
> System.out.println("Single Path: " +
> pathBuffer.toString());
> } else {
> System.out.println("Could not find a
> path, path is null");
> }
> tx.success();
> } catch (Exception e) {
> e.printStackTrace();
> graphDb.shutdown();
> }
> graphDb.shutdown();
>
> }
>
> }
>
> Thanks!
>
> -- Bernie
>
>
>
> Confidentiality Notice: This electronic message transmission, including any
> attachment(s), may contain confidential, proprietary, or privileged
> information from Chemical Abstracts Service ("CAS"), a division of the
> American Chemical Society ("ACS"). If you have received this transmission in
> error, be advised that any disclosure, copying, distribution, or use of the
> contents of this information is strictly prohibited. Please destroy all
> copies of the message and contact the sender immediately by either replying
> to this message or calling 614-447-3600.
>
> _______________________________________________
> Neo4j mailing list
> User at lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
More information about the User
mailing list