2

我在 Neo4j 中做了一些错误的动作,现在我们有一个包含重复节点的图表。在重复对中,完整的属性集属于对中的第一个,关系都属于对中的第二个。索引是 node_auto_index。

节点:

Id  Name Age  From       Profession

1  Bob  23   Canada       Doctor
2  Amy  45   Switzerland  Lawyer
3  Sam  09   US  
4  Bob   
5  Amy
6  Sam

关系:

Id  Start  End   Type
1     4     6     Family
2     5     6     Family
3     4     5     Divorced

我试图避免重做整批导入。有没有办法根据“名称”字符串属性合并密码中的节点,同时保留所有属性和关系?

谢谢!

4

2 回答 2

1

好吧,我想我想通了:

START first=node(*), second=node(*) 
WHERE has(first.Name) and has(second.Name) and has(second.Age) and NOT(has(first.Age))
WITH first, second
WHERE first.Name= second.Name
SET first=second

查询仍在处理中,但有更有效的方法吗?

于 2013-08-06T21:39:52.837 回答
1

您在这两个集合之间创建了一个交叉产品,所以这将是昂贵的。更好的是对名称进行索引查找。

START first=node(*), second=node(*) 
WHERE has(first.Name) and has(second.Name) and has(second.Age) and NOT(has(first.Age))
WITH first, second
SKIP 20000 LIMIT 20000
WHERE first.Name= second.Name
SET first=second

而且您可能还必须对处理进行分页。

START n=node:node_auto_index("Name:*")
WITH n.Name, collect(n) nodes
SKIP 20000 LIMIT 20000
WHERE length(nodes) == 2
WITH head(filter(x in nodes : not(has(x.Age)))) as first, head(filter(x in nodes : has(x.Age))) as second
SET first=second
于 2013-08-07T09:44:25.193 回答