Neo.DatabaseError.Statement.ExecutionFailed

问题描述 投票:-1回答:1

我的查询意图是返回多个节点中的两个节点或图形的选定部分之间的关​​系作为子图。我在运行以下查询时收到错误消息:

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:当起始节点和结束节点相同时,最短路径算法不起作用。如果您在笛卡尔积之后执行shortestPath搜索,可能会对传递给shortestPath的某些行具有相同的开始和结束节点。

如果您不想遇到此异常,并且可以接受丢失这些行的结果的可能性,请通过将cypher.forbid_shortestpath_common_nodes设置为false来在Neo4j配置中禁用此功能。如果您不能接受缺失的结果,并且确实想要两个公共节点之间的shortestPath,那么使用标准Cypher可变长度模式表达式重新编写查询,然后按路径长度排序并限制为一个结果。

我的neo4j配置文件中没有这行:

cypher.forbid_shortestpath_common_node=false

关于如何解决这个问题的建议将不胜感激。

neo4j cypher
1个回答
0
投票

成功!!只添加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
© www.soinside.com 2019 - 2024. All rights reserved.