如何解决尝试从 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
假设您要遍历几跳,可以合理地假设您会发现您正在接触很多节点。有助于提高性能的几件事:
- 使用标签和关系类型,即
MATCH (A:LABEL_FOR_A)-[:RELATIONSHIP1_TYPE]->(obj:LABEL_FOR_MID)-[:RELATIONSHIP2_TYPE]->(B:LABEL_FOR_B)
中间节点的标签对优化您的查询特别有帮助,但可能无法立即知道此标签。在这种情况下,如果需要,我会调查“obj”具有的不同标签,然后从那里开始工作。
- 使用
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 举报,一经查实,本站将立刻删除。