Neo.DatabaseError.Statement.ExecutionFailed - PullRequest
       7

Neo.DatabaseError.Statement.ExecutionFailed

0 голосов
/ 10 апреля 2019

Моя цель запроса - вернуть отношения между двумя из нескольких узлов или выбранными частями графа как подграф.Я получаю сообщение об ошибке при выполнении запроса ниже:

with ['社会主义现代化建设', '中国共产党中央委员会', '香港', '依法治国', '澳门', '台湾同胞', '改革开放', '春节(中国传统节日)', '习近平', '中华人民共和国中央军事委员会', '全面深化改革', '中华人民共和国主席', '人民大会堂(1960年营口卷烟厂注册卷烟品牌)', '中国共产党中央委员会总书记', '团拜会'] as value_list
match (n:Node) 
where n.value in value_list
with collect(n) as result
unwind result as source
unwind result as target

match paths = shortestPath((source)-[*1..3]-(target)) 
with paths limit 20000
return paths

И я получаю это сообщение:

Neo.DatabaseError.Statement.ExecutionFailed Neo.DatabaseError.Statement.ExecutionFailed: алгоритм кратчайшего пути не работает, когда начальный и конечный узлы совпадают.Это может произойти, если вы выполните поиск shorttestPath после декартового произведения, которое может иметь одинаковые начальный и конечный узлы для некоторых строк, переданных в shorttestPath.

Если вы не хотите испытывать это исключение и можете допустить возможность пропуска результатов для этих строк, отключите это в конфигурации Neo4j, установив для cypher.forbid_shortestpath_common_nodes значение false.Если вы не можете принять пропущенные результаты и действительно хотите иметь самый короткий путь между двумя общими узлами, перезапишите запрос, используя стандартное выражение шаблона переменной длины Cypher с последующим упорядочением по длине пути и ограничением одним результатом.

У меня нет этой строки в моем конфигурационном файле neo4j:

cypher.forbid_shortestpath_common_node=false

Предложения о том, как обойти это, будут приняты.

1 Ответ

0 голосов
/ 10 апреля 2019

успех !! только добавить where source<>target

PROFILE
with ['社会主义现代化建设', '中国共产党中央委员会', '香港', '依法治国', '澳门', '台湾同胞', '改革开放', '春节(中国传统节日)', '习近平', '中华人民共和国中央军事委员会', '全面深化改革', '中华人民共和国主席', '人民大会堂(1960年营口卷烟厂注册卷烟品牌)', '中国共产党中央委员会总书记', '团拜会'] as value_list
match (n:Node) 
where n.value in value_list
with collect(n) as result
unwind result as source
unwind result as target
match paths = shortestpath((source)-[*0..3]-(target)) 
where source<>target
with paths limit 20000
return paths
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...