Рекомендация Cypher - PullRequest
       28

Рекомендация Cypher

0 голосов
/ 31 октября 2019

Рассматривая пример из мастерской фильмов GrandStack https://github.com/grand-stack/grand-stack-movies-workshop/blob/master/neo4j-database/answers.md

Здесь предлагается запрос рекомендуемых фильмов

MATCH (m:Movie) WHERE m.movieId = $movieId
MATCH (m)-[:IN_GENRE]->(g:Genre)<-[:IN_GENRE]-(movie:Movie)
WITH m, movie, COUNT(*) AS genreOverlap
MATCH (m)<-[:RATED]-(:User)-[:RATED]->(movie:Movie)
WITH movie,genreOverlap, COUNT(*) AS userRatedScore
RETURN movie ORDER BY (0.9 * genreOverlap) + (0.1 * userRatedScore)  DESC LIMIT 3

Не будет ли этот запрос смещен в том смысле, что он будет рассчитывать только userRatedScoreдля фильмов, которые имеют хотя бы один жанр в фильме с Id $ movieId?

Как будет выглядеть переписанный запрос, который вычисляет обе оценки независимо, означая, что он все равно будет рассчитывать userRatedScore для данного фильма, даже если он не разделяет жанры с фильмом с Id $ movieId

1 Ответ

0 голосов
/ 01 ноября 2019

Если вы хотите игнорировать взвешивание, предоставляемое Genre, вы можете удалить часть запроса, которая его ищет, что-то вроде:

MATCH (m:Movie) WHERE m.movieId = $movieId, (m)<-[:RATED]-(:User)-[:RATED]->(movie:Movie)
WITH movie, COUNT(*) AS userRatedScore
RETURN movie ORDER BY (0.1 * userRatedScore)  DESC LIMIT 3
...