Извините за плохое название, я новичок в базах данных Cypher и Graph в целом.Я не уверен, что заголовок полностью отражает то, что я пытаюсь спросить, пожалуйста, дайте мне знать, если у вас есть лучшие заголовки!
У меня очень простая настройка графика с User
узлами и Movie
узлы и существует отношение от User
к Movie
, называемое :REVIEWED
, которое имеет свойство rating
, которое несет рейтинг пользователей (1,0-5,0 включительно).См. Диаграмму ниже:
![enter image description here](https://i.stack.imgur.com/4zA3X.png)
Я думаю, что этот дизайн имеет смысл для видеосистемы для захвата отзывов пользователей.Я не думаю, что обзоры должны существовать как их собственные узлы, потому что они лучше представлены как отношения между пользователем (рецензентом) и фильмом на графике.Не говоря уже о том, что целевые свойства могут существовать в отношениях, чтобы выразить масштаб / вес / метаданные в отношениях, и это отличный вариант их использования.Однако из-за этого дизайна мне было трудно найти запрос Cypher, чтобы выполнить следующее:
- Найти десятку лучших фильмов, у которых хотя бы один отзыв был меньше 3.
То есть мы хотим отсортировать фильмы по их средней оценке, однако хотя бы один отзыв должен быть меньше 3,0.Запрос, который я использовал для сортировки фильмов на основе их среднего рейтинга:
MATCH (movie:Movie)<-[review:REVIEWED]-(user:User)
RETURN movie.movieTitle, avg(review.rating) as avgRating
ORDER BY avgRating DESC
LIMIT 10
Это имеет смысл для меня, однако, когда я пытаюсь ограничить путь к обзорам с рейтингом менее 3, см. Ниже:
MATCH (movie:Movie)<-[review:REVIEWED]-(:User)
WHERE review.rating < 3
RETURN movie.movieTitle, avg(review.rating) as avgRating
ORDER BY avgRating DESC
LIMIT 10
Подбираются только пути, имеющие отношения с рейтингом менее 3, что я и должен получить.Тем не менее, проблема в том, что, когда мы усредняем рейтинги, они усредняют только оценки менее 3,0.
В идеале мы хотим иметь все отзывы для этого фильма, если существует обзор для этого фильма с рейтингом менее 3,0, независимо от того, находится ли он в согласованном пути.Это где я запутался.Поскольку Cypher использует шаблоны для сопоставления путей в графе, как мы можем использовать его для проверки всех путей из узла и проверки соответствия условию, а затем продолжения сопоставления всех путей на основе этого результата.
С нетерпением ждем, что вы, ребята, думаете, заранее спасибо!