web-dev-qa-db-fra.com

Identifiants de noeuds dans neo4j

Je suis nouveau sur Neo4j - je viens de commencer à jouer avec hier soir.

J'ai remarqué que tous les nœuds sont identifiés par un entier auto-incrémenté généré lors de la création du nœud - est-ce toujours le cas?

Mon ensemble de données comporte des clés de chaîne naturelles, aussi je voudrais éviter de mapper entre les identifiants attribués à Neo4j et les miens. Est-il possible d'utiliser des identificateurs de chaîne à la place?

52
Jonathan Williamson

Considérez l'identificateur de nœud comme un détail d'implémentation (comme l'identificateur de ligne des bases de données relationnelles, il peut être utilisé pour identifier les nœuds, mais ne doit pas être invoqué pour ne jamais être réutilisé).

Vous devez ajouter vos clés naturelles en tant que propriétés au nœud, puis indexer vos nœuds avec la clé naturelle (ou activer leur indexation automatique).

E..g dans l'API 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

Avec auto-indexer, vous activez l'indexation automatique pour votre champ "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();

Voir: http://docs.neo4j.org/chunked/milestone/auto-indexing.html Et: http://docs.neo4j.org/chunked/milestone/indexing.html

66
Michael Hunger

Cela devrait aider:

Créer l'index pour sauvegarder l'indexation automatique lors de l'importation par lots We Sachez que si l'indexation automatique est activée dans neo4j.properties, chaque nœud qui est créé sera ajouté à un index nommé node_auto_index. À présent, voici le bit cool. Si nous ajoutons l'index manuel d'origine (au moment De l'importation par lots), appelons-le noeud_auto_index et activons auto .__ indexant dans neo4j, les nœuds insérés par lot apparaîtront comme si auto-indexé. Et à partir de là, chaque fois que vous créez un nœud, le nœud sera également indexé. **

Source: Identification des nœuds avec des clés personnalisées

0
user2522884

les identifiants générés sont par défaut et ne peuvent pas être modifiés par les utilisateurs. L'utilisateur peut utiliser vos identificateurs de chaîne en tant que propriété de ce nœud.

0
Reetish Chand

Selon Neo docs, il devrait y avoir des index automatiques en place http://neo4j.com/docs/stable/query-schema-index.html

0
Pavel Niedoba

Au-delà de toutes les réponses, neo4j crée ses propres identifiants pour travailler plus vite et mieux servir. Assurez-vous que le système interne n’entre pas en conflit entre les identifiants, il créera des nœuds avec les mêmes propriétés et s’affichera dans le système sous forme de nœuds vides.

0
Sumsun