有没有办法指数关系存在?

时间:2015-01-28 12:57:10

标签: neo4j cypher

最近,我遇到了在循环中使用下一个查询创建节点链的问题

MATCH (p: Node) WHERE NOT (p)-[:RELATIONSHIP]->() 
WITH p LIMIT 1000 
MATCH (q: Node{id: p.id}) WITH p, max(id(q)) as tail
MATCH (t: Node) where id(t) = tail 
WITH p, t
CREATE (p)-[:RELATIONSHIP]->(t)

在创建第一个~1 000 000个节点的链后出现问题。查询

MATCH (p: Node) WHERE NOT (p)-[:RELATIONSHIP]->() 

工作非常缓慢,因为它首先查看了1 000 000并检查他们是否没有关系,但他们都有。在一定数量的节点上,查询以"未知错误"结束。为了解决这个问题,我尝试了下一个查询。

MATCH (p: Node) with p skip 1000000  
Match (p) WHERE NOT (p)-[:RELATIONSHIP]->()

MATCH (p: Node) with p order by id(p) desc  
MATCH (p) WHERE NOT (p)-[:RELATIONSHIP]->()

但我想知道是否有更优雅的方法可以解决这个问题,例如"索引关系存在"?

1 个答案:

答案 0 :(得分:5)

您可以使用“遗留索引”对关系属性进行索引,这不再是完全推荐的,但这不会将关系缺失编入索引,因此对您没有任何好处。我可能会尝试通过属性上的标签或索引来找到一种标记需要关系的节点的方法。从那里开始你的比赛,它会快得多。