I'm new to Neo4j - just started playing with it yesterday evening.
I've notice all nodes are identified by an auto-incremented integer that is generated during node creation - is this always the case?
My dataset has natural string keys so I'd like to avoid having to map between the Neo4j assigned ids and my own. Is it possible to use string identifiers instead?
Neo4j CQL CREATE a Node Label Label is a name or identifier to a Node or a Relationship in Neo4j Database. We can say this Label name to a Relationship as "Relationship Type". We can use CQL CREATE command to create a single label to a Node or a Relationship and multiple labels to a Node.
The limitation is currently 2^35, so approximately 34 billion nodes. See the documentation.
Create a node with multiple labels. To add labels when creating a node, use the syntax below. In this case, we add two labels.
If you want to get the labels of a specify node, then use labels(node) ; If you only want to get all node labels in neo4j, then use this function instead: call db. labels; , never ever use this query: MATCH n RETURN DISTINCT LABELS(n) . It will do a full table scan, which is very very slow..
Think of the node-id as an implementation detail (like the rowid of relational databases, can be used to identify nodes but should not be relied on to be never reused).
You would add your natural keys as properties to the node and then index your nodes with the natural key (or enable auto-indexing for them).
E..g in the 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
With auto-indexer you would enable auto-indexing for your "id" field.
// 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();
See: http://docs.neo4j.org/chunked/milestone/auto-indexing.html And: http://docs.neo4j.org/chunked/milestone/indexing.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With