【发布时间】:2012-02-21 12:19:22
【问题描述】:
我是 Neo4j 的新手 - 昨天晚上才开始使用它。
我注意到所有节点都由在节点创建期间生成的自动递增整数标识 - 总是这样吗?
我的数据集有自然的字符串键,所以我想避免在 Neo4j 分配的 id 和我自己的 id 之间进行映射。是否可以改用字符串标识符?
【问题讨论】:
标签: neo4j
我是 Neo4j 的新手 - 昨天晚上才开始使用它。
我注意到所有节点都由在节点创建期间生成的自动递增整数标识 - 总是这样吗?
我的数据集有自然的字符串键,所以我想避免在 Neo4j 分配的 id 和我自己的 id 之间进行映射。是否可以改用字符串标识符?
【问题讨论】:
标签: neo4j
将 node-id 视为一个实现细节(就像关系数据库的 rowid 一样,可用于标识节点,但不应依赖于永远不会重用)。
您可以将自然键作为属性添加到节点,然后使用自然键索引您的节点(或为它们启用自动索引)。
例如在 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 还有:http://docs.neo4j.org/chunked/milestone/indexing.html
【讨论】:
这应该会有所帮助:
创建索引以支持批量导入期间的自动索引我们 知道如果在 neo4j.properties 中启用了自动索引,每个节点 创建的将添加到名为 node_auto_index 的索引中。现在, 这是很酷的一点。如果我们加上原来的手动索引(当时 批量导入)并将其命名为 node_auto_index 并启用自动 在 neo4j 中进行索引,然后批量插入的节点将显示为 自动索引。从那里开始,每次您创建一个节点时,该节点 也会被编入索引。**
【讨论】:
根据 Neo 文档,应该有自动索引 http://neo4j.com/docs/stable/query-schema-index.html 但是还是有很多限制
【讨论】:
除了所有答案之外,neo4j 仍会创建自己的 ID 以更快地工作并提供更好的服务。请确保内部系统的 id 之间没有冲突,然后它将创建具有相同属性的节点,并在系统中显示为空节点。
【讨论】:
生成的ID是默认的,用户不能修改。用户可以使用您的字符串标识符作为该节点的属性。
【讨论】: