Думайте об идентификаторе узла как о деталях реализации (например, идентификатор строки реляционных баз данных может использоваться для идентификации узлов, но на него нельзя полагаться, чтобы он никогда не использовался повторно).
Вы бы добавили свой естественныйключи как свойства для узла, а затем индексировать ваши узлы с помощью естественного ключа (или включить для них автоматическую индексацию).
E..g в Java API:
Index<Node> idIndex = db.index().forNodes("identifiers");
Node n = db.createNode();
n.setProperty("id", "my-natural-key");
idIndex.add(n, "id",n.getProperty("id"));
// later
Node n = idIndex.get("id","my-natural-key").getSingle(); // node or null
Савтоиндексатор вы бы включили автоиндексирование для вашего поля "id".
// via configuration
GraphDatabaseService db = new EmbeddedGraphDatabase("path/to/db",
MapUtils.stringMap(
Config.NODE_KEYS_INDEXABLE, "id", Config.NODE_AUTO_INDEXING, "true" ));
// programmatic (not persistent)
db.index().getNodeAutoIndexer().startAutoIndexingProperty( "id" );
// Nodes with property "id" will be automatically indexed at tx-commit
Node n = db.createNode();
n.setProperty("id", "my-natural-key");
// Usage
ReadableIndex<Node> autoIndex = db.index().getNodeAutoIndexer().getAutoIndex();
Node n = autoIndex.get("id","my-natural-key").getSingle();
См .: http://docs.neo4j.org/chunked/milestone/auto-indexing.html И: http://docs.neo4j.org/chunked/milestone/indexing.html