neo4j 查找所有发布我喜欢的内容的朋友

问题描述

我想找到所有发布我喜欢的东西的朋友。为什么此查询不返回任何行,但每个子句本身都会返回一些内容

 match (start:Person)-[:LIKES]->(post:Post),(start)-[:FRIEND]->(person: Person),(person)-[:POSTED]->(post) return start,post,person

profile01

profile02

解决方法

感谢您的查询计划。

我们可以看到行在 (start)-[:FRIEND]->(person) 的扩展中降为零,因此发生了以下两种情况之一:要么 :FRIEND 不是实际的关系类型(可能是不匹配情况的问题),要么更有可能的是,所有存在的 :FRIEND 关系都在相反的方向,传入起始节点而不是传出。

对于像这样的社交图,因为它们都是 :Person 节点,所以没有办法判断关系是在哪个方向创建的,当你查询时,方向不重要,一切都应该重要是否存在 :FRIEND 关系。

尝试从这里的模式中删除方向:(start)-[:FRIEND]-(person: Person)。如果您的关系类型正确,那应该会给您带来正确的结果。

,

为简单起见,我还将这 3 个模式合并为一个长模式。这样做将确保它不会提取不适合以后模式的额外模式(被检索,然后被过滤掉)。这是 Cypher 的样子:

MATCH (start:Person)-[:LIKES]->(post:Post)<-[:POSTED]-(person: Person)
WHERE (start)-[:FRIEND]-(person)
RETURN start,post,person