首页 > 解决方案 > neo4j CYPHER 非对称查询响应

问题描述

我正在使用 neo4j 密码将一些查询传递到我的(相当大的)相关实体数据库中。

特别是,我需要找到 type 的所有节点,annotation或者physical_entity通过单个关系连接到 type 的节点annotation

我的理解是,对如下所示的无向连接的查询将返回N所有类型的节点annotationphysical_entity连接到另一个类型的节点annotation

MATCH (N)-[r]-(M)
WHERE ((N.parse_type='physical_entity' OR N.parse_type='annotation')
AND M.parse_type='annotation')
RETURN COUNT(DISTINCT(N))

> 63311

而如果我要求M,它只会返回annotation与其他类型节点链接的类型节点annotation,这将是前一个查询中节点的子集(即前一个查询的结果减去节点physical_entity)。

MATCH (N)-[r]-(M)
WHERE ((N.parse_type='physical_entity' OR N.parse_type='annotation')
AND M.parse_type='annotation')
RETURN COUNT(DISTINCT(M))

> 47355

然而,这种情况并非如此。第二个查询中有一些类型annotation的节点不在第一个查询中:

MATCH (N)-[r]-(M)
WHERE ((N.parse_type='physical_entity' OR N.parse_type='annotation')
AND M.parse_type='annotation')
WITH [N, M] as tl
UNWIND tl as n
RETURN COUNT(DISTINCT(n))

> 633554

为什么?

标签: neo4jcypher

解决方案


推荐阅读