无法在 Cypher 中显示具有多个传入关系的匹配节点的路径

Can't display paths for matched nodes with multiple incoming relationships in Cypher

我有一个基于此模式的 Neo4j 图:(:Entity)-[:HAS_VALUE]->(:Value)-[:HAS_SYNONYM]->(:Synonym)。 每个实体可以有多个值,每个值可以有多个同义词。我正在寻找不明确的同义词 -- 连接了 1 个以上值节点的同义词节点。

我可以找到有问题的同义词节点如下:

MATCH ()-[r:HAS_SYNONYM]->(n) WITH n, count(r) as num_values WHERE num_values > 1 RETURN n

但是,当我尝试显示路径(以便我可以看到与违规值的互连)时,浏览器给我“(无更改,无记录)”。以下是我尝试过的一些查询:

MATCH (n1:Value)-[r:HAS_SYNONYM]->(n2:Synonym) WITH n1, n2, r, count(r) as num_values WHERE num_values > 1 RETURN n1, r, n2

MATCH (n1)-[r:HAS_SYNONYM]->(n2) WITH n1, n2, r, count(r) as num_values WHERE num_values > 1 RETURN n1, r, n2

MATCH p = (n)-[r:HAS_SYNONYM]->() MATCH (n)-[r:HAS_SYNONYM]->() WITH p, n, count(r) as num_values WHERE num_values > 1 RETURN nodes(p)

是我的语法有误,还是更基础?

您的查询的问题是 WITH 命令。当我们写 WITH n1, n2, r, count(r),计数是针对 n1n2r 的每个不同组合计算的,它们始终为 1,因此您看不到任何变化,没有记录。 尝试先按 n2 个节点计算计数,然后用 count > 1 过滤同义词,然后获取这些同义词的路径。

像这样:

MATCH (:Value)-[r:HAS_SYNONYM]->(n2:Synonym) WITH n2, count(r) as num_values WHERE num_values > 1 
MATCH (n2)<-[rel:HAS_SYNONYM]-(v:Value)
RETURN v, rel, n2