Databases Reference
In-Depth Information
Example: A test-driven social network data model
In this example we're going to demonstrate developing a very simple Cypher query for
a social network. Given the names of a couple of members of the network, our query
determines the distance between them.
First we create a small graph that is representative of our domain. Using Cypher, we
create a network comprising ten nodes and eight relationships:
public
GraphDatabaseService
createDatabase
()
{
// Create nodes
String
cypher
=
"CREATE\n"
+
"(ben {name:'Ben'}),\n"
+
"(arnold {name:'Arnold'}),\n"
+
"(charlie {name:'Charlie'}),\n"
+
"(gordon {name:'Gordon'}),\n"
+
"(lucy {name:'Lucy'}),\n"
+
"(emily {name:'Emily'}),\n"
+
"(sarah {name:'Sarah'}),\n"
+
"(kate {name:'Kate'}),\n"
+
"(mike {name:'Mike'}),\n"
+
"(paula {name:'Paula'}),\n"
+
"ben-[:FRIEND]->charlie,\n"
+
"charlie-[:FRIEND]->lucy,\n"
+
"lucy-[:FRIEND]->sarah,\n"
+
"sarah-[:FRIEND]->mike,\n"
+
"arnold-[:FRIEND]->gordon,\n"
+
"gordon-[:FRIEND]->emily,\n"
+
"emily-[:FRIEND]->kate,\n"
+
"kate-[:FRIEND]->paula"
;
GraphDatabaseService
db
=
new
TestGraphDatabaseFactory
().
newImpermanentDatabase
();
ExecutionEngine
engine
=
new
ExecutionEngine
(
db
);
engine
.
execute
(
cypher
);
// Index all nodes in "user" index
Transaction
tx
=
db
.
beginTx
();
try
{
Iterable
<
Node
>
allNodes
=
GlobalGraphOperations
.
at
(
db
).
getAllNodes
();
for
(
Node
node
:
allNodes
)
{
if
(
node
.
hasProperty
(
"name"
)
)
{
db
.
index
().
forNodes
(
"user"
)
.
add
(
node
,
"name"
,
node
.
getProperty
(
"name"
)
);
}
}