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

Evg*_*gen 1 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)
Run Code Online (Sandbox Code Playgroud)

在创建具有第一个~1 000 000个节点的链之后出现问题.询问

MATCH (p: Node) WHERE NOT (p)-[:RELATIONSHIP]->() 
Run Code Online (Sandbox Code Playgroud)

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

MATCH (p: Node) with p skip 1000000  
Match (p) WHERE NOT (p)-[:RELATIONSHIP]->()
Run Code Online (Sandbox Code Playgroud)

要么

MATCH (p: Node) with p order by id(p) desc  
MATCH (p) WHERE NOT (p)-[:RELATIONSHIP]->()
Run Code Online (Sandbox Code Playgroud)

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

sub*_*ris 5

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