Cypher:创建已存在的模式索引

时间:2016-08-09 04:02:28

标签: neo4j cypher

当你要求Neo4j创建一个已经存在的索引时,它不会抛出异常,这似乎对我有用。

session.run("CREATE INDEX ON :User(email)");

问题1:

但neo4j如何处理这个问题?它是否会删除索引然后重新创建它,还是完全忽略查询,因为索引已经存在?

我想知道,因为我有一些CRUD操作,我想在创建节点时为我的节点定义模式,这意味着调用“CREATE INDEX”等等。缺点是这意味着为每个新节点创建了创建索引的冗余调用,如果索引已经存在则忽略它们就没问题。

问题2:

我注意到以下工作即使没有标签用户尚未存在(意味着我可以在关联节点之前创建标签和索引)。

CREATE INDEX ON :User(email)

我是Neo4j的新手,并且在RDBMS世界中使用,你无法在不存在的列上创建索引。我是否认为在我创建具有这些标签和属性的节点之前创建索引和标签不应该导致任何不可预见的问题?

2 个答案:

答案 0 :(得分:1)

回答问题#2,即使没有带有这些标签或属性的节点,创建索引和约束也是完全正常的,实际上是一种非常常见的情况。我强烈建议走这条路。

我建议不要在创建每个节点时创建索引。虽然我不相信它会浪费很多周期,但这似乎不是一个好的设计。

答案 1 :(得分:0)

问题1

如果要创建约束,则无效。它们只能被调用一次,如果它们存在,它们确实会抛出异常。正常索引似乎不这样做,不应尝试这整个方法。

问题2

请参阅InverseFalcons评论,但这似乎是正确的方法。