有没有办法索引关系的存在?

Is there any way to index relationship existence?

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

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 个人并检查他们是否没有关系,但他们都有。在一定数量的节点上,查询以 "Unknown error" 结束。为了解决这个问题,我尝试了下一个查询。

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]->()

但是我想知道是否有更优雅的方法来解决这个问题,比如"indexing relationship existence"?

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