Reputation: 1089
I load my data using the following code:
public void createGraph() {
Map<String, String> config = new HashMap<String, String>();
config.put("cache_type", "none");
config.put("use_memory_mapped_buffers", "true");
config.put("neostore.nodestore.db.mapped_memory", "200M");
config.put("neostore.relationshipstore.db.mapped_memory", "1000M");
config.put("neostore.propertystore.db.mapped_memory", "250M");
config.put("neostore.propertystore.db.strings.mapped_memory", "250M");
inserter = BatchInserters.inserter("./data/neo4j", config);
long start = System.currentTimeMillis();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new
FileInputStream("./data/enronEdges.txt")));
String line;
int lineCounter = 1;
long srcNode, dstNode;
while((line = reader.readLine()) != null) {
if(lineCounter > 4) {
String[] parts = line.split("\t");
srcNode = getOrCreate(parts[0]);
dstNode = getOrCreate(parts[1]);
inserter.createRelationship(srcNode, dstNode, RelTypes.SIMILAR, null);
}
lineCounter++;
}
reader.close();
}
catch (IOException e) {
e.printStackTrace();
}
long time = System.currentTimeMillis() - start;
inserter.createDeferredSchemaIndex(NODE_LABEL).on("nodeId").create();
System.out.println("Loading time: " + time / 1000.0);
inserter.shutdown();
}
private long getOrCreate(String value) {
Long id = cache.get(Long.valueOf(value));
if(id == null) {
Map<String, Object> properties = MapUtil.map("nodeId", value);
id = inserter.createNode(properties, NODE_LABEL);
cache.put(Long.valueOf(value), id);
}
return id;
}
Then I am trying to retrieve the nodes with this code:
GraphDatabaseService gdb = new GraphDatabaseFactory().newEmbeddedDatabase(dbPath);
try(Transaction tx = gdb.beginTx()) {
Node n = gdb.findNodesByLabelAndProperty(DynamicLabel.label("Node"), "nodeId", 1).iterator().next();
System.out.println(n);
}
But I am getting the following error:
Exception in thread "main" java.util.NoSuchElementException: No more elements in org.neo4j.collection.primitive.PrimitiveLongCollections$5@6b3ab760 at org.neo4j.collection.primitive.PrimitiveLongCollections$PrimitiveLongBaseIterator.next(PrimitiveLongCollections.java:60) at org.neo4j.collection.primitive.PrimitiveLongCollections$13.next(PrimitiveLongCollections.java:712) at org.neo4j.helpers.collection.ResourceClosingIterator.next(ResourceClosingIterator.java:76) at test.Neo4jBatchInsert.visitAllNodes(Neo4jBatchInsert.java:56) at test.Neo4jBatchInsert.main(Neo4jBatchInsert.java:49)
Isn't this the proper way to get an indexed node?
FYI, I use neo4j 2.1.3 embedded.
Upvotes: 0
Views: 87
Reputation: 39915
The index is populated when gdb
has been initialized so it might take some time for bringing the index online.
You might call gdb.schema().awaitIndexesOnline(10l, TimeUnits.MINUTES)
prior to findNodesByLabelAndProperty
to make sure indexes are in place.
Upvotes: 1