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

Reply via email to