36.4. User database with legacy index

Unless you have specific reasons to use the legacy indexing, see Section 36.3, “User database with indexes” instead.


Please read Section 36.5, “Managing resources when using long running transactions” on how to properly close ResourceIterators returned from index lookups.

You have a user database, and want to retrieve users by name using the legacy indexing system.


The source code used in this example is found here: EmbeddedNeo4jWithIndexing.java

We have created two helper methods to handle user names and adding users to the database:

private static String idToUserName( final int id )
    return "user" + id + "@neo4j.org";

private static Node createAndIndexUser( final String username )
    Node node = graphDb.createNode();
    node.setProperty( USERNAME_KEY, username );
    nodeIndex.add( node, USERNAME_KEY, username );
    return node;

The next step is to start the database server:

graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );

It’s time to add the users:

try ( Transaction tx = graphDb.beginTx() )
    nodeIndex = graphDb.index().forNodes( "nodes" );
    // Create some users and index their names with the IndexService
    for ( int id = 0; id < 100; id++ )
        createAndIndexUser( idToUserName( id ) );

And here’s how to find a user by Id:

int idToFind = 45;
String userName = idToUserName( idToFind );
Node foundUser = nodeIndex.get( USERNAME_KEY, userName ).getSingle();

System.out.println( "The username of user " + idToFind + " is "
    + foundUser.getProperty( USERNAME_KEY ) );