neo4j中的节点标识符

我是Neo4j的新手 – 昨天晚上刚刚开始玩。

我注意到所有的节点都是由在节点创build期间生成的自动递增的整数来标识的 – 情况总是如此?

我的数据集有自然的string键,所以我想避免必须在Neo4j分配的id和我自己之间进行映射。 有没有可能使用string标识符呢?

把node-id想象成一个实现细节(就像关系数据库的rowid一样,可以用来标识节点,但不应该依赖于不被重用)。

您可以将自然键作为属性添加到节点,然后使用自然键为节点编制索引(或为其启用自动索引)。

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 And: http : //docs.neo4j.org/chunked/milestone/indexing.html

可以在Neo4J中为节点/ 事务设置唯一的ID。 您可以通过将其设置为其中一个configuration文件来将其设置为索引。

此外,这是强烈build议,即拿出一个“自然”的id为您的节点和边缘,而不是使用Neo4j seq id。 这将节省您往返数据库的往返行程。 这是我过去所做的。

这应该有所帮助:

在批量导入过程中创build索引以支持自动索引我们知道,如果在neo4j.properties中启用了自动索引,则创build的每个节点都将被添加到名为node_auto_index的索引中。 现在,这是一个很酷的位。 如果我们添加原始手工索引(在批量导入时)并将其命名为node_auto_index,并在neo4j中启用自动索引,则批插入节点将显示为自动索引。 每次创build节点时,节点都会被索引。**

来源: 用自定义键识别节点

除了所有的答案,neo4j还创build了自己的ID,使其更快地工作,并提供更好的服务。 请确保内部系统不会在ID之间冲突,然后创build具有相同属性的节点,并在系统中显示为空节点。