Piense en el ID de nodo como un detalle de implementación (como el rowid de bases de datos relacionales, se puede usar para identificar nodos pero no se debe confiar en que nunca se volverá a usar).
Agregará sus claves naturales como propiedades al nodo y luego indexará sus nodos con la clave natural (o habilitará la indexación automática para ellos).
E..g en la API de Java:
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
con auto-controlador paso a paso que le permitirá indexación automática para el campo "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();
Ver: http://docs.neo4j.org/chunked/milestone/auto-indexing.html Y: http://docs.neo4j.org/chunked/milestone/indexing.html
Gracias Michael, exactamente lo que necesitaba saber. Esto obviamente no es demasiado común, ¡la documentación y la discusión son muy ligeras en el terreno! –
@Michael Hunger cuando llamas a n.setProperty ("id", "my-natural-key"); ¿Está creando una identificación diferente de la identificación de nodo autogenerada que neo4j crea correcta?¿O se trata de un intento de sobrescribir la identificación que utiliza neo4j? –
@ michael-hunger ¿Es posible agregar una propiedad de autoincremento? ¿O tengo que crear identificadores únicos para los nodos que creo? – satoru