neo4j中的节点标识符

neo4j中的节点标识符,neo4j,Neo4j,我是Neo4j的新手-昨天晚上刚开始玩它 我注意到所有节点都由一个自动递增的整数标识,该整数在节点创建过程中生成-总是这样吗 我的数据集具有自然字符串键,因此我希望避免必须在Neo4j分配的ID和我自己的ID之间进行映射。是否可以改用字符串标识符?将节点id视为一个实现细节(与关系数据库的rowid一样,可以用于标识节点,但不应依赖于它而永远不被重用) 您可以将自然关键点作为属性添加到节点,然后使用自然关键点为节点编制索引(或为它们启用自动索引) 例如,在Java API中: Index-idI

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

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


我的数据集具有自然字符串键,因此我希望避免必须在Neo4j分配的ID和我自己的ID之间进行映射。是否可以改用字符串标识符?

将节点id视为一个实现细节(与关系数据库的rowid一样,可以用于标识节点,但不应依赖于它而永远不被重用)

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

例如,在Java API中:

Index-idIndex=db.Index().forNodes(“标识符”);
Node n=db.createNode();
n、 setProperty(“id”、“我的自然密钥”);
添加(n,“id”,n.getProperty(“id”);
//后来
节点n=idIndex.get(“id”,“我的自然密钥”).getSingle();//节点或空值
使用自动索引器,您可以为“id”字段启用自动索引

//通过配置
GraphDatabaseService db=新嵌入的GraphDatabase(“路径/to/db”,
MapUtils.stringMap(
Config.NODE_key_INDEXABLE,“id”,Config.NODE_AUTO_INDEXING,“true”);
//编程(非持久性)
db.index().getNodeAutoIndexer().startAutoIndexingProperty(“id”);
//属性为“id”的节点将在tx提交时自动编制索引
Node n=db.createNode();
n、 setProperty(“id”、“我的自然密钥”);
//用法
ReadableIndex autoIndex=db.index().getNodeAutoIndexer().getAutoIndex();
Node n=autoIndex.get(“id”,“我的自然键”).getSingle();
见: 和:

这应该有帮助:

创建索引,以便在批量导入期间返回自动索引 要知道,如果在neo4j.properties中启用了自动索引,则每个节点 将被添加到名为node_auto_index的索引中。现在, 这是最酷的一点。如果我们添加原始手动索引(在 将其命名为节点\自动\索引并启用自动 在neo4j中建立索引,则批插入的节点将显示为 自动索引。从这里开始,每次创建节点时 也将被索引**


来源:

根据Neo docs,应该有自动索引
但是仍然有很多限制

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

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

谢谢Michael,这正是我需要知道的。这些东西显然还不是太主流,文档和讨论在地面上非常轻松@Michael Hunger当你调用n.setProperty(“id”,“我的自然密钥”);您正在创建与neo4j创建的自动生成节点ide不同的id,对吗?或者这是试图覆盖neo4j正在使用的id?@michael hunger是否可以添加自动增量属性?或者我必须为我创建的节点创建唯一的id吗?另一个需要注意的要点是,当您提供自己的id时,请确保其值不是很大。更好的方法是坚持渐进性。否则,在db close上,Neo4j引擎需要相当长的时间才能关闭,而且磁盘上的db大小也非常大。