我创建了一个带有索引的标签,并在标签中包含许多节点。我现在想要添加唯一约束但得到错误:
已编入索引:BACM(姓名)。
如何将唯一性约束添加到已存在节点的现有标签?
答案 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)