You have a user database, and want to retrieve users by name. To begin with, this is the structure of the database we want to create:
That is, the reference node is connected to a users-reference node to which all users are connected.
To begin with, we define the relationship types we want to use:
private static enum RelTypes implements RelationshipType { USERS_REFERENCE, USER }
Then 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 EmbeddedGraphDatabase( DB_PATH ); nodeIndex = graphDb.index().forNodes( "nodes" ); registerShutdownHook();
It’s time to add the users:
Transaction tx = graphDb.beginTx(); try { // Create users sub reference node (see design guidelines on // http://wiki.neo4j.org/ ) Node usersReferenceNode = graphDb.createNode(); graphDb.getReferenceNode().createRelationshipTo( usersReferenceNode, RelTypes.USERS_REFERENCE ); // Create some users and index their names with the IndexService for ( int id = 0; id < 100; id++ ) { Node userNode = createAndIndexUser( idToUserName( id ) ); usersReferenceNode.createRelationshipTo( userNode, RelTypes.USER ); }
And here’s how to find a user by Id:
int idToFind = 45; Node foundUser = nodeIndex.get( USERNAME_KEY, idToUserName( idToFind ) ).getSingle(); System.out.println( "The username of user " + idToFind + " is " + foundUser.getProperty( USERNAME_KEY ) );
Full source code: EmbeddedNeo4jWithIndexing.java
Copyright © 2012 Neo Technology