为什么我的Cypher查询会产生未知错误

时间:2017-01-19 09:27:20

标签: neo4j cypher

这是我的图表:

enter image description here

我想运行一个查询来查找图表中两个端口之间的所有简单路径,例如,如果我想要“Bandar Abbas”和“JebelAli”之间的路径,我只需要以下路径:

“Bandar Abbas” - > “JEBELALI”

不是这两个:

“Bandar Abbas” - > “JEBELALI”
“Bandar Abbas” - > “JebelAli” - > “Soha” - > “Chang Choong” - > “JebelAli”

所以我写了这个Chypher查询:

MATCH path=(port1: Port { name: "Bandar Abbas" })-[:CMA*]->(port2: Port { name: "JebelAli" })
WHERE ALL(n in nodes(path) WHERE 1=size(filter(m in nodes(path) WHERE n=m)))
RETURN path;

但它给了我这个错误:

  

未找到钥匙:UNNAMED50
  Neo.DatabaseError.General.UnknownError

3 个答案:

答案 0 :(得分:0)

我的错误,如果您想要所有简单路径,那么您可以使用APOC Procedures执行此操作,特别是使用graph algorithms部分中的allSimplePaths过程。

使用示例:

MATCH (port1: Port { name: "Bandar Abbas" }), (port2: Port { name: "JebelAli" })
call apoc.algo.allSimplePaths(port1, port2, 'CMA>', 5) YIELD path
RETURN path

答案 1 :(得分:0)

我用这个查询解决了我的问题:

MATCH path=(port1: Port { name: "Bandar Abbas" })-[:CMA*]->(port2: Port { name: "JebelAli" })
WHERE size(nodes(path))=size(filter(m in nodes(path) WHERE 1=size(filter(n in nodes(path) WHERE n.name=m.name ))))
RETURN path;


但我仍然不知道为什么我的第一个查询给出了错误!。

答案 2 :(得分:0)

这似乎是neo4j 3.1.0中的一个错误(可能就是你正在使用的)。

这是获取所有节点仅出现一次的路径的另一种方法(即,节点数与不同节点的数量相同):

MATCH path=(port1: Port { name: "Bandar Abbas" })-[:CMA*]->(port2: Port { name: "JebelAli" })
WITH path, nodes(path) AS ns
WITH path, ns, COUNT(ns) AS cnt_all
UNWIND ns AS n
WITH path, cnt_all, COUNT(DISTINCT n) AS cnt_distinct
WHERE cnt_all = cnt_distinct
RETURN path;