Prev |  | Next

## 14.8. Relationship indexes

An index for relationships is just like an index for nodes, extended by providing support to constrain a search to relationships with a specific start and/or end nodes These extra methods reside in the RelationshipIndex interface which extends Index<Relationship>.

Example of querying a relationship index:

    // find relationships filtering on start node
    // using exact matches
    IndexHits<Relationship> reevesAsNeoHits;
    reevesAsNeoHits = roles.get( "name", "Neo", reeves, null );
    Relationship reevesAsNeo = reevesAsNeoHits.iterator().next();
    reevesAsNeoHits.close();
    // find relationships filtering on end node
    // using a query
    IndexHits<Relationship> matrixNeoHits;
    matrixNeoHits = roles.query( "name", "*eo", null, theMatrix );
    Relationship matrixNeo = matrixNeoHits.iterator().next();
    matrixNeoHits.close();

And here’s an example for the special case of searching for a specific relationship type:

    // find relationships filtering on end node
    // using a relationship type.
    // this is how to add it to the index:
    roles.add( reevesAsNeo, "type", reevesAsNeo.getType().name() );
    // Note that to use a compound query, we can't combine committed
    // and uncommitted index entries, so we'll commit before querying:
    tx.success();
    tx.finish();
    // and now we can search for it:
    IndexHits<Relationship> typeHits;
    typeHits = roles.query( "type:ACTS_IN AND name:Neo", null, theMatrix );
    Relationship typeNeo = typeHits.iterator().next();
    typeHits.close();

Such an index can be useful if your domain has nodes with a very large number of relationships between them, since it reduces the search time for a relationship between two nodes. A good example where this approach pays dividends is in time series data, where we have readings represented as a relationship per occurrence.

Copyright © 2011 Neo Technology

Prev | Up | Next
| Home |