That worked... thanks for the insight into how Expander is used. Much appreciated...
-- Bernie -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Andres Taylor Sent: Friday, October 08, 2010 4:04 PM To: Neo4j user discussions Subject: Re: [Neo4j] PathFinder.findSinglePath returns null Hi again, Tobias just pointed out to me what is the problem with the code. OrderedByTypeExpander is an immutable class. So where it says: StandardExpander expander = new OrderedByTypeExpander(); expander.add(RelationshipTypes.KNOWS, Direction.OUTGOING); expander.add(RelationshipTypes.LIKES, Direction.OUTGOING); it should really say: StandardExpander expander = new OrderedByTypeExpander(); expander = expander.add(RelationshipTypes.KNOWS, Direction.OUTGOING); expander = expander.add(RelationshipTypes.LIKES, Direction.OUTGOING); The add method returns a new expander with the RelationshipType added. Does this code work for you? Cheers, Andrés On Fri, Oct 8, 2010 at 9:46 PM, Andres Taylor < [email protected]> wrote: > 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. <[email protected]> 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 >> [email protected] >> https://lists.neo4j.org/mailman/listinfo/user >> > > _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user 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. -- Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline <html> <body style="font-family: Arial, Helvetica, sans-serif; color:#000000"> <p><font size="1" face="Arial"> <strong>Confidentiality Notice</strong>: 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.</font></p> </body> </html> ---- _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

