1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.neo4j.examples;
20
21 import org.neo4j.graphdb.Direction;
22 import org.neo4j.graphdb.GraphDatabaseService;
23 import org.neo4j.graphdb.Node;
24 import org.neo4j.graphdb.Relationship;
25 import org.neo4j.graphdb.RelationshipType;
26 import org.neo4j.graphdb.Transaction;
27 import org.neo4j.graphdb.index.Index;
28 import org.neo4j.kernel.EmbeddedGraphDatabase;
29
30
31
32
33
34
35
36
37 public class UsingIntegratedIndex
38 {
39 private static final String DB_PATH = "neo4j-store";
40 private static final String USERNAME_KEY = "username";
41 private static GraphDatabaseService graphDb;
42 private static final String INDEX_NAME = "user-index";
43 private static Index<Node> nodeIndex;
44
45 private static enum RelTypes implements RelationshipType
46 {
47 USERS_REFERENCE,
48 USER
49 }
50
51 public static void main( final String[] args )
52 {
53
54 graphDb = new EmbeddedGraphDatabase( DB_PATH );
55 nodeIndex = graphDb.index().forNodes( INDEX_NAME );
56 registerShutdownHook();
57
58
59 Transaction tx = graphDb.beginTx();
60 try
61 {
62
63
64 Node usersReferenceNode = graphDb.createNode();
65 graphDb.getReferenceNode().createRelationshipTo(
66 usersReferenceNode, RelTypes.USERS_REFERENCE );
67
68 for ( int id = 0; id < 100; id++ )
69 {
70 Node userNode = createAndIndexUser( idToUserName( id ) );
71 usersReferenceNode.createRelationshipTo( userNode,
72 RelTypes.USER );
73 }
74 System.out.println( "Users created" );
75
76
77 int idToFind = 45;
78 Node foundUser = nodeIndex.get( USERNAME_KEY, idToUserName( idToFind) ).getSingle();
79
80 System.out.println( "The username of user " + idToFind + " is "
81 + foundUser.getProperty( USERNAME_KEY ) );
82
83
84 for ( Relationship relationship : usersReferenceNode.getRelationships(
85 RelTypes.USER, Direction.OUTGOING ) )
86 {
87 Node user = relationship.getEndNode();
88 nodeIndex.remove( user, USERNAME_KEY,
89 user.getProperty( USERNAME_KEY ) );
90 user.delete();
91 relationship.delete();
92 }
93 usersReferenceNode.getSingleRelationship( RelTypes.USERS_REFERENCE,
94 Direction.INCOMING ).delete();
95 usersReferenceNode.delete();
96 tx.success();
97 }
98 finally
99 {
100 tx.finish();
101 }
102 System.out.println( "Shutting down database ..." );
103 shutdown();
104 }
105
106 static void shutdown()
107 {
108
109 graphDb.shutdown();
110
111 }
112
113 private static String idToUserName( final int id )
114 {
115 return "user" + id + "@neo4j.org";
116 }
117
118 private static Node createAndIndexUser( final String username )
119 {
120
121 Node node = graphDb.createNode();
122 node.setProperty( USERNAME_KEY, username );
123 nodeIndex.add( node, USERNAME_KEY, username );
124
125 return node;
126 }
127
128 private static void registerShutdownHook()
129 {
130
131
132
133 Runtime.getRuntime().addShutdownHook( new Thread()
134 {
135 @Override
136 public void run()
137 {
138 shutdown();
139 }
140 } );
141 }
142 }