2016-09-20 16 views
2

検索タグに映画のタグが含まれている映画を探したい。以下は私のクエリですが、期待した結果が得られていません。どうすればこのクエリが間違っているか教えてください。Neo4j - タグに基づいて映画の推薦を得る

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 

私はこのクエリを試してみましたが、動作していますが、動的タグIDを作成する方法がわかりません。私はneo4jで初心者ですが、私はの文をneo4jで読んでいますが、それをどのように使用するか、またそれが動作するかどうかはわかりません。

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) 
+0

は、私はあなたが(それはあなたがとにかくクエリでやるように見えるものだ)「** **私が見ていない」意味だと思います。 「動的タグID」とはどういう意味ですか:クエリで使用されるタグIDをパラメータ化しますか?映画には少なくとも1つのタグまたはすべてのタグが含まれている必要がありますか? –

+0

ありがとう@FrankPavageau、動的に私はクエリ['16'、 '19'、 '21'、 '22'、 '23'、 '24'、 '25']の静的なtagIdsの配列を意味しました –

答えて

3
// 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 

またはパターンを有する変異体:

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 
+0

ありがとう、完璧に動作します! –

関連する問題