Neo4j-根据标签获取电影推荐

Zee*_*oft 4 neo4j cypher neo4j-cql

我想查找其搜索标签包含movie的标签,由我观看。以下是我的查询,但未产生预期的结果,有人可以让我知道此查询出了什么问题吗?

MATCH (m:Movie)-[:HAS_TAG]->(t:Tag)
    WHERE NOT (:Person {personId : '50'})-[:WATCHED]->(m)
    AND (m)-[:HAS_TAG]->(t)
    RETURN DISTINCT(m.movieId) as movieId,
    COLLECT(t.tagId) as Tag
Run Code Online (Sandbox Code Playgroud)

我试过这个查询,它正在工作,但是我不知道如何使它成为动态tagid?我是neo4j的新手,我在neo4j中阅读了WITH语句,但不确定如何使用它以及它是否有效。

MATCH (m:Movie)-[:HAS_TAG]->(t:Tag)
WHERE NOT (:Person {personId : '50'})-[:WATCHED]->(m)
AND t.tagId in ['16','19','21','22','23','24','25'] 
RETURN DISTINCT(m.movieId)
Run Code Online (Sandbox Code Playgroud)

std*_*b-- 5

// Collect all films and tags that apply to films that are watched by:
//
MATCH (p:Person {personId : '50'})
WITH p
MATCH (p)-[:WATCHED]->(m:Movie)-[:HAS_TAG]->(t:Tag)
WITH p, collect(distinct m) AS movies, collect(distinct t) AS tags
//
// And get recommendation:
//
MATCH (m:Movie)-[:HAS_TAG]->(t:Tag) 
WHERE NOT m IN movies AND t IN tags
RETURN distinct m AS movies
Run Code Online (Sandbox Code Playgroud)

或带有模式的变体:

MATCH (p:Person {personId : '50'})
WITH p
MATCH (p)-[:WATCHED]->(wm:Movie)-[:HAS_TAG]->(t:Tag)<-[:HAS_TAG]-(rm:Movie)
WHERE NOT (p)-[:WATCHED]->(rm)
RETURN distinct rm AS movies
Run Code Online (Sandbox Code Playgroud)