Neo4j Cypher запрос выполняется бесконечно - PullRequest
0 голосов
/ 22 февраля 2019

Я повторял запрос ниже несколько раз за последние два дня, и интерфейс Neo4j говорит, что он работает, но кажется, что он работает бесконечно.Я запустил другие запросы, которые все возвращают вывод.Я оставил запрос запущенным в течение 9 часов, и он все еще работал после 9 часов.Я не уверен, в чем проблема, но был бы признателен за любую помощь.Я использую Neo4j-community-2.3.12, которая является более старой версией, но она должна работать, поскольку я следую учебному пособию, а остальные запросы работают нормально.

Сценарий Cypher - который очень прост:

match p=(ione)-[:ResponseTo*]->(itwo)
where length(p)=9 with p
match (u)-[:CreateChat]->(i)
where i in nodes(p)
return count(distinct u);

Изображение бесконечно запущенного запроса:

Screenshot of neo4j query running endlessly

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Как отметил Радж, в этом вам захочется использовать метки, так как сейчас выполняется сканирование всех узлов, которое не работает.

Мы также можем убедиться, что второе соответствие более производительно,убедитесь, что мы начинаем i с ранее сопоставленных узлов, а не применяем его в качестве фильтра после сопоставления:

match p=(ione)-[:ResponseTo*9]->(itwo)
unwind nodes(p) as i
with DISTINCT i
match (u)-[:CreateChat]->(i)
return count(distinct u); 
0 голосов
/ 22 февраля 2019

Этот запрос выглядит как бесконечный цикл.

Я бы предложил вместо получения всех путей и проверки длины позже получить пути желаемой длины (9).

Также рассмотримдобавление меток в запросе пути.

match p=(ione)-[:ResponseTo*9]->(itwo)
with p
match (u)-[:CreateChat]->(i)
where i in nodes(p)
return count(distinct u); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...