Neo4j 做推荐 (2)—— 基于内容的过滤前文只是简单描述了内容过滤的概念和简单演示。
在此,我们将从具体实例来介绍如何使用基于内容的过滤方法来给用户推荐电影。
首先,基于共同类型的相似性,如果用户看过《Inception》,我们就可以给用户推荐和该电影具有相同分类(流派)的电影。
// Find similar movies by common genres
MATCH (m:Movie)-[:IN_GENRE]->(g:Genre)<-[:IN_GENRE]-(rec:Movie)
WHERE m.title = "Inception"
WITH rec, COLLECT(g.name) AS genres, COUNT(*) AS commonGenres
RETURN rec.title, genres, commonGenres
ORDER BY commonGenres DESC LIMIT 10;
通过上面的Cypher语句,可以很清晰地看到,筛选出 m 的条件是title 属性为“Inception”,然后通过关系(:IN_GENRE)找出流派(g:Genre),此处注意关系的方向是 -> 。找出 (g:GENRE) 之后,反向查询 <- 有该流派的所有电影。
在结果返回中,COLLECT 首先把流派名放入一个集合中,然后计算所属流派的数量(此数量是电影m 和电影rec 具有相同流派的数量)。返回结果再排个序,取最多的前10条。
网友评论