neo4j中的节点标识符

时间:2012-01-29 06:38:35

标签: neo4j

我是Neo4j的新手 - 昨天晚上才开始玩它。

我注意到所有节点都是由在节点创建过程中生成的自动递增整数标识的 - 总是这样吗?

我的数据集有自然的字符串键,所以我想避免在Neo4j指定的ID和我自己的ID之间进行映射。是否可以使用字符串标识符?

5 个答案:

答案 0 :(得分:66)

将node-id视为实现细节(如关系数据库的rowid,可用于标识节点,但不应依赖它们永远不会被重用)。

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

Java API中的E..g:

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

答案 1 :(得分:0)

这应该有所帮助:

  

创建索引以在批量导入期间支持自动索引我们   知道如果在每个节点的neo4j.properties中启用了自动索引   创建的名称将添加到名为node_auto_index的索引中。现在,   这是很酷的一点。如果我们添加原始手动索引(当时   批量导入)并将其命名为node_auto_index并启用auto   在neo4j中索引,然后批量插入的节点将显示为   自动索引。并且每次创建节点时都会从那里开始   也将被编入索引。**

来源:Identifying nodes with Custom Keys

答案 2 :(得分:0)

根据Neo docs,应该有自动索引 http://neo4j.com/docs/stable/query-schema-index.html 但仍存在很多局限性

答案 3 :(得分:0)

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

答案 4 :(得分:0)

生成的ID是默认值,用户无法修改。用户可以使用您的字符串标识符作为该节点的属性。