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