This example is demonstrating the use of node uniqueness. Below an imaginary domain graph with Principals that own pets that are descendant to other pets.
In order to return all descendants
of Pet0 which have the relation owns to Principal1 (Pet1 and Pet3),
the Uniqueness of the traversal needs to be set to
NODE_PATH rather than the default NODE_GLOBAL so that nodes
can be traversed more that once, and paths that have
different nodes but can have some nodes in common (like the
start and end node) can be returned.
final Node target = data.get().get( "Principal1" );
TraversalDescription td = Traversal.description()
.uniqueness( Uniqueness.NODE_PATH )
.evaluator( new Evaluator()
{
@Override
public Evaluation evaluate( Path path )
{
if ( path.endNode().equals( target ) )
{
return Evaluation.INCLUDE_AND_PRUNE;
}
return Evaluation.EXCLUDE_AND_CONTINUE;
}
} );
Traverser results = td.traverse( start );
This will return the following paths:
(3)--[descendant,0]-->(1)<--[owns,3]--(5) (3)--[descendant,2]-->(4)<--[owns,5]--(5)
Let’s create a new TraversalDescription from the old one,
having NODE_GLOBAL uniqueness to see the difference.
| Tip | |
|---|---|
The |
TraversalDescription nodeGlobalTd = td.uniqueness( Uniqueness.NODE_GLOBAL ); results = nodeGlobalTd.traverse( start );
Now only one path is returned:
(3)--[descendant,0]-->(1)<--[owns,3]--(5)
Full source code: UniquenessOfPathsTest.java
Copyright © 2011 Neo Technology