neo4j如何设置setproperty以外的节点id

neo4j如何设置setproperty以外的节点id,neo4j,Neo4j,我想将节点id设置为0,1,2,3,。。。。而不是setProperty() 例如,当我想创建节点时,newno[i]的id就是i。 对于大数据集,如果每次调用getProperty(),程序将花费很长时间。 谢谢Neo4j会自动分配ID,您无法更改此设置。如果需要,请尝试在节点上使用属性 newno[i].setProperty("internal_id", i); 正如@RaduK所指出的,neo4j设置节点本身的id,并且不允许用户覆盖此行为。也许他们将来会做些什么。但是,如果您正在

我想将节点id设置为0,1,2,3,。。。。而不是setProperty()

例如,当我想创建节点时,newno[i]的id就是i。 对于大数据集,如果每次调用getProperty(),程序将花费很长时间。
谢谢

Neo4j会自动分配ID,您无法更改此设置。如果需要,请尝试在节点上使用属性

  newno[i].setProperty("internal_id", i);

正如@RaduK所指出的,neo4j设置节点本身的id,并且不允许用户覆盖此行为。也许他们将来会做些什么。但是,如果您正在考虑在系统中使用neo4j生成的id,neo4j会在其页面上发出警告

节点的id是唯一的,但请注意以下几点:Neo4j重用其id 删除节点和关系时的内部ID,这意味着 这样称呼他们是不好的做法。相反,使用应用程序 生成的ID

所以不要在系统中使用neo4j的id

也就是说,你最关心的是,每次使用房产都会导致延误。使用Neo4J 2.x,您可以选择在属性上设置索引,以便快速遍历。下面是你如何做到这一点。在GraphDatabaseService对象所在的代码中,插入以下代码:

try(Transaction transaction = graphDatabaseService.beginTx())
        {
            Schema schema = graphDatabaseService.schema();
            schema.indexFor(DynamicLabel.label("User")).on("internal_id").create();

            transaction.success();
        }
这段代码将告诉neo4j,从现在开始,您必须在属性“internal_id”上的所有类型为“User”的节点上创建并维护索引


此外,neo4j有一个内部缓存系统,人们通常称之为热缓存。这意味着您的查询只在第一次运行时需要时间。从那时起,如果您反复尝试同一个查询,查询将非常快速。

这是唯一的方法?当然,您不能更改neo4j生成的ID;如果id属性不适合您的需要(我不知道详细情况),您可能会找到其他类型的数据建模。
  newno[i].setProperty("internal_id", i);
try(Transaction transaction = graphDatabaseService.beginTx())
        {
            Schema schema = graphDatabaseService.schema();
            schema.indexFor(DynamicLabel.label("User")).on("internal_id").create();

            transaction.success();
        }