Understanding indexes in Neo4j
02:08 02 Oct 2025

I have a fairly complicated Cypher query as follows:

MATCH (n1:Object {id:299235,type:3})-[r1:COMPARED_TO]->(n2:Object {type:3})-[r2:COMPARED_TO]->(n3:Object {type:3})-[r3:COMPARED_TO]->(n4:Object {type:3})-[r4:COMPARED_TO]->(n5:Object {type:3})-[r5:COMPARED_TO]->(n6:Object {type:3})-[r6:COMPARED_TO]->(n7:Object {id:302515,type:3})
WHERE n1.id <> n2.id AND n1.id <> n3.id AND n1.id <> n4.id AND n1.id <> n5.id AND n1.id <> n6.id AND n1.id <> n7.id AND n2.id <> n3.id AND n2.id <> n4.id AND n2.id <> n5.id AND n2.id <> n6.id AND n2.id <> n7.id AND n3.id <> n4.id AND n3.id <> n5.id AND n3.id <> n6.id AND n3.id <> n7.id AND n4.id <> n5.id AND n4.id <> n6.id AND n4.id <> n7.id AND n5.id <> n6.id AND n5.id <> n7.id AND n6.id <> n7.id AND r2.r1 > r1.r1 AND r3.r1 > r2.r1 AND r3.r1 > r1.r1 AND r4.r1 > r3.r1 AND r4.r1 > r2.r1 AND r4.r1 > r1.r1 AND r5.r1 > r4.r1 AND r5.r1 > r3.r1 AND r5.r1 > r2.r1 AND r5.r1 > r1.r1 AND r6.r1 > r5.r1 AND r6.r1 > r4.r1 AND r6.r1 > r3.r1 AND r6.r1 > r2.r1 AND r6.r1 > r1.r1
RETURN r1,r2,r3,r4,r5,r6
ORDER BY r1.r1 DESC,r2.r1 DESC,r3.r1 DESC,r4.r1 DESC,r5.r1 DESC,r6.r1 DESC LIMIT 99

and it is so slow as to be completely useless.

I cannot understand what indexes I need to create to make this usable.

I have tried

CREATE INDEX range_index_relationships
FOR ()-[r:COMPARED_TO]-()
ON (r.r1)

which made no difference.

neo4j cypher