Neo4j中数组的唯一性约束

时间:2014-04-10 15:04:05

标签: arrays neo4j unique-index

有没有办法在以下架构中强制执行电子邮件地址的唯一性?

(n:人{id:{value},姓名:{value},电子邮件:[{values}]})

这个想法是没有两个人可以共享同一个电子邮件地址,但每个人可能有几个电子邮件地址。因此,每个电子邮件地址在整个数据库中只应存在一次。

有一种明显的脏方法,即通过使每个电子邮件地址成为节点并强制实施电子邮件节点的唯一性以及电子邮件人员关系,但这大大增加了节点的数量和查询的复杂性。我的数据库......

我想知道是否有更好的方法来强制执行我不知道的约束。

1 个答案:

答案 0 :(得分:1)

更新:这不起作用!请参阅以下评论。

所以,我刚刚找到了解决方法。这不是一个完美的解决方案,但它适用于我的目的,而传统索引仍然存在。希望在基于模式的索引获得传统Lucene索引的全部功能(包括使用Levenshtein距离的正则表达式和模糊搜索)之前不会删除它们。

因此,在冗余电子邮件条目的情况下,我使用以下技巧更新我的节点:

START n = node:node_auto_index(email={email_value}) 
MERGE (p:Person {id:n.id}) 
ON MATCH SET p.other_array_property = 
             p.other_array_property + {other_property_value}
ON CREATE SET p.other_array_property = {other_property_value};

这里我在“email”属性上启用了遗留自动索引,这是一个数组属性(如上图所示。

现在,这并没有为节点创建建立约束,但它应该可以用于我的目的(我正在集成来自不同来源的几个数据孤岛)。在其他运营情况下,这可能也可能不够......

希望有人能告诉我们更好的解决方案......