已创建带索引的标签现在要添加约束

时间:2014-10-06 17:25:52

标签: neo4j

我创建了一个带有索引的标签,并在标签中包含许多节点。我现在想要添加唯一约束但得到错误:

已编入索引:BACM(姓名)。

如何将唯一性约束添加到已存在节点的现有标签?

1 个答案:

答案 0 :(得分:3)

您必须删除索引,然后添加约束。

DROP INDEX ON :BACM(name)
CREATE CONSTRAINT ON (bacm:BACM) ASSERT bacm.name IS UNIQUE

您需要在两个单独的查询中执行此操作。

这样做的原因是它们都是Lucene索引,只是不同的类型,并且由于Neo4j使用索引而不必指定使用哪个索引,所以如果有多个相同的名称,它会窒息。

编辑:应该指出,如果您有多个节点名称冲突,那么您已经拥有许多节点的事实才有意义。创建和删除索引不会损害您的节点,数据库将在可用时使用索引,否则使用Cypher,并在被告知时重建索引。创建约束时,如果有两个冲突的节点,它将通知您,新约束将失败。

刚才我自己的测试:

Unable to create CONSTRAINT ON ( omg:Omg ) ASSERT omg.foo IS UNIQUE:
Multiple nodes with label `Omg` have property `foo` = 'foo':
  node(2)
  node(4)