Обнаружение циклов в графе свойств neo4j с использованием cypher

Каков наилучший способ обнаружения циклов на графике значительного размера с использованием cypher.

У меня есть график, который имеет около 250000 узлов и около 270000 отношений, и я хотел бы обнаружить циклы на подграфе около 10 тыс. узлов и задействовать отношения 100 тыс. Цифр, который я написал, похож на

start 
      n = node:node_auto_index(some lucene query that returns about 10k nodes)

match
    p =  n-[:r1|r2|r3*]->n
return p

Однако это не очень эффективно.

Может кто-нибудь предложить лучший способ сделать это.

Ответ 1

1) Подсчитать узлы без знака
2) Узлы флагов без исходящих отношений (листья)
3) Узлы флагов без входящих отношений (корней)
4) Если какие-либо узлы были помечены в 2 или 3, вернитесь к шагу 1

5) Если узлы без флажка остаются, у вас есть как минимум 1 цикл

цикл будет находиться в наборе неустановленных узлов
поиск узлов с наименьшим краем [in | out] может помочь если их еще слишком много, чтобы идентифицировать цикл