Pomyśl o identyfikatorze węzła jako szczegółów implementacji (takich jak rowid relacyjnych baz danych, które mogą być używane do identyfikowania węzłów, ale nie należy się na nich powoływać, aby nigdy nie zostać ponownie użyte).
Dodajesz swoje naturalne klucze jako właściwości do węzła, a następnie indeksujesz swoje węzły za pomocą klucza naturalnego (lub włączasz dla nich automatyczne indeksowanie).
E..g w 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
z auto-indekser chcesz włączyć automatyczne indeksowanie dla "id" pole.
// 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();
Patrz: http://docs.neo4j.org/chunked/milestone/auto-indexing.html I: http://docs.neo4j.org/chunked/milestone/indexing.html
Dzięki Michael, dokładnie to, co potrzebowałem wiedzieć. To oczywiście nie jest jeszcze mainstream, dokumentacja i dyskusja są bardzo lekkie! –
@ Michael Głód, gdy zadzwonisz n.setProperty ("id", "mój-naturalny-klucz"); tworzysz inny identyfikator od automatycznie wygenerowanego węzła ide, który neo4j tworzy poprawne?Czy jest to próba zastąpienia identyfikatora używanego przez neo4j? –
@ michael-hunger Czy można dodać właściwość auto-increment? Czy muszę tworzyć niepowtarzalne identyfikatory dla tworzonych węzłów? – satoru