Следующий запрос взят из neo4j mov ie просмотр песочницы набора данных:
MATCH (u:User {name: "Some User"})-[r:RATED]->(m:Movie)
WITH u, avg(r.rating) AS mean
MATCH (u)-[r:RATED]->(m:Movie)-[:IN_GENRE]->(g:Genre)
WHERE r.rating > mean
WITH u, g, COUNT(*) AS score
MATCH (g)<-[:IN_GENRE]-(rec:Movie)
WHERE NOT EXISTS((u)-[:RATED]->(rec))
RETURN rec.title AS recommendation, rec.year AS year, COLLECT(DISTINCT g.name) AS genres, SUM(score) AS sscore
ORDER BY sscore DESC LIMIT 10
, что я не могу понять: почему ключевое слово DISTINCT
требуется в операторе возврата запроса ?. Поскольку ожидаемые результаты последнего оператора MATCH
выглядят примерно так:
g1,x
g1,y
...
g2,z
g2,v
g2,m
...
gn,m
gn,b
gn,x
, где g1,g2,..gn
- набор жанров, а x,y,z,v,m,b...
- набор фильмов (кроме того, есть пользователь и столбец оценки удален для удобства чтения).
Итак, насколько я понимаю, что возвращает этот запрос: Для каждого mov ie вернуть его жанры и сумму их оценок.