Neo4j 使用cypher查找子图中未连接到指定节点的节点

Neo4j 使用cypher查找子图中未连接到指定节点的节点,neo4j,cypher,recommendation-engine,Neo4j,Cypher,Recommendation Engine,我正在用Neo4j学习cypher,但我遇到了一些问题,表明我仍然不太懂它 我试图编写一个查询,查找一个子图,然后从该子图中排除连接到指定节点的节点 实际上,这是一个推荐问题:我找到了一组推荐,但希望排除目标用户已经知道的那些东西 我想我可以做一些类似的事情: match (u:User{id:"some id"}), (:Category{title:"some category"})-[:categorizes]->(i:Item) where not (u)-[:knows_abo

我正在用Neo4j学习cypher,但我遇到了一些问题,表明我仍然不太懂它

我试图编写一个查询,查找一个子图,然后从该子图中排除连接到指定节点的节点

实际上,这是一个推荐问题:我找到了一组推荐,但希望排除目标用户已经知道的那些东西

我想我可以做一些类似的事情:

match (u:User{id:"some id"}), (:Category{title:"some category"})-[:categorizes]->(i:Item) 
where not (u)-[:knows_about]-(i) 
return  i
但这不起作用


有人能解释一下我做错了什么/我应该做什么吗?

我想你需要以下几点:

MATCH (:Category{title:"some category"})-[:categorizes]->(i:Item)
MATCH (u:User {id:some_id})
WHERE  not (u)-[:knows_about]-(i) 
RETURN i

您可能希望在第二个WHERE子句(性能!)中添加一个方向。

不,这不会给出预期的结果。它仍然返回用户“知道”的项目:-(我收回这一点,结果发现我需要更好地理解我的数据:-)我将上面的答案重新组织成一种更具可读性的形式:
MATCH(u:user{id:'some id})和u MATCH(I:Item)(I)返回I
,事实上,不需要
,看起来我的原始查询工作正常,我只是误解了“正确”的结果是什么样子。看起来我在以下方面获得了最好的性能:
MATCH(:Category{title:“some Category”})-[:categories]->(I:Item)MATCH(u:User{id:“some id”}),其中不是(u)-[:konws_about]->(I)返回我更新了我的答案。我不知道您可以像
{id:some_id}
那样引用id。请随意接受。;-)