微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试从 Neo4j Cypher 查询中获取与唯一端点的关系

如何解决尝试从 Neo4j Cypher 查询中获取与唯一端点的关系

我在图中存在这样的节点:

(A)-[relationship1]->(object)-[relationship2]->(B)

搜索内容会带来 1000 条匹配项。 当 UNIQUE B 的数量大于 25 时,我想要得到的是返回 (A)。

解决方法

要在 Cypher 中实现这一点,您可以使用“WITH”。这是帮助理解密码的非常有用的资源:cypher refcard

“WITH”的工作方式类似于“返回”并计算它前面的密码,然后您可以在密码的另一个步骤中处理其输出。这是您如何使用它来实现您的结果:

MATCH (A)-[:RELATIONSHIP1_TYPE]->(obj)-[:RELATIONSHIP2_TYPE]->(B) 
WITH A,count(distinct B) as unique_related_nodes
WHERE unique_related_nodes > 25 
RETURN A

假设您要遍历几跳,可以合理地假设您会发现您正在接触很多节点。有助于提高性能的几件事:

  1. 使用标签和关系类型,即 MATCH (A:LABEL_FOR_A)-[:RELATIONSHIP1_TYPE]->(obj:LABEL_FOR_MID)-[:RELATIONSHIP2_TYPE]->(B:LABEL_FOR_B)

中间节点的标签对优化您的查询特别有帮助,但可能无法立即知道此标签。在这种情况下,如果需要,我会调查“obj”具有的不同标签,然后从那里开始工作。

  1. 使用 EXPLAIN 帮助了解可以优化查询的位置:
EXPLAIN MATCH (A)-[:RELATIONSHIP1_TYPE]->(obj)-[:RELATIONSHIP2_TYPE]->(B) 
WITH A,count(distinct B) as unique_related_nodes
WHERE unique_related_nodes > 25 
RETURN A

享受吧!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。