Neo4j Uniquness更新唯一索引值

时间:2013-03-25 23:25:04

标签: neo4j cypher

唯一= create_or_fail

在创建新节点时效果很好,因为如果已经存在重复的索引键/值,它会抛出4xx响应。

但是,如果节点已存在并已建立索引并且索引值需要更新,则无法(我知道)更新值,如果新值已存在则无法通知。这是因为如果新值已经存在,则添加节点到索引REST调用不会抛出4xx响应。据我所知,索引的添加节点甚至不参与索引的唯一性。

一种解决方案是删除节点并重新添加它,但这并不容易,因为必须重新创建此节点上的所有其他索引和关系。

另一种解决方案是将Uniqueness参数添加到Add Node to Index REST调用 http://docs.neo4j.org/chunked/1.9.M05/rest-api-indexes.html#rest-api-add-node-to-index

关于此的任何其他想法?

谢谢

1 个答案:

答案 0 :(得分:0)

我在这个问题上遇到了问题,这就是我想要解决的问题。

在更新期间,请在REST批处理中执行以下操作:

  1. 删除所需索引的所有节点索引条目
  2. 使用CreateOrFail在所需索引上创建一个新节点,除了使用普通属性,只需使用虚拟属性,例如DeleteMe=true
  3. 将节点添加到所需的索引,因为如果它到达目前为止,则上一步成功
  4. 更新节点的属性
  5. 使用Cypher语句删除虚拟节点Ex:

    START n=node:index_name(index_key={value}) WHERE (n.DeleteMe!)=true DELETE n