2015-10-29 2 views
1

Я пытаюсь сформировать запрос, который соответствует нескольким отношениям. Вот мой запрос снесены к основам:Соответствие нескольких отношений в Cypher?

START inputMovie=node(1) 
MATCH inputMovie<-[r:RATED]-User-[o:RATED]->(movies)<-[:IS_GENRE]->genres 
RETURN movies.title LIMIT 5 

Я хочу, чтобы вернуть список фильмов, которые были номинальными и тот же человек, и одного и того же жанра. Что я делаю не так?

спасибо

ответ

2

У вас есть опечатка, поскольку Cypher не позволяет двунаправленной связи: <-[:IS_GENRE]->.

Принимая догадку в модели данных, это может работать для вас:

START inputMovie=node(1) 
MATCH inputMovie<-[r:RATED]-User-[o:RATED]->(movies)-[:IS_GENRE]->genres 
RETURN movies.title LIMIT 5; 

Примечание: приведенный выше запрос может возвращать повторяющиеся результаты, так как несколько пользователей могут наблюдать одни и те же фильмы. Если это вызывает беспокойство, вы можете использовать квалификатор DISTINCT, чтобы предотвратить это. Например:

START inputMovie=node(1) 
MATCH inputMovie<-[r:RATED]-User-[o:RATED]->(movies)-[:IS_GENRE]->genres 
RETURN DISTINCT movies.title LIMIT 5; 

[Изменено]

Если вы хотите, чтобы вернуться только фильмы, которые (по крайней мере) все те же жанры, как inputMovie, вы можете сделать следующее.

START inputMovie=node(1) 
MATCH (inputGenre)<-[:IS_GENRE]-(inputMovie) 
WITH inputMovie, COLLECT(inputGenre) AS inputGenres 
MATCH (inputMovie)<-[r:RATED]-(User)-[o:RATED]->(movie)-[:IS_GENRE]->(genre) 
WITH inputGenres, movie, COLLECT(genre) AS genres 
WHERE ALL(x IN inputGenres WHERE x IN genres) 
RETURN movie.title LIMIT 5; 

Примечание:

  • Я переименован несколько идентификаторов, для ясности (т.е. movies и genres).
  • Отборщик DISTINCT больше не нужен, поскольку агрегация над узлом movie (во втором WITH) неявно делает каждый экземпляр movie уникальным.
+0

спасибо. Проблема была в моей опечатке. Хотя теперь у меня есть запрос, я получаю нечетные результаты, например, Sixth Sense будет соответствовать Up (pixar), потому что оба они делятся драматическим жанром. Вы знаете способ сочетаться со всеми жанрами, а не с одним? – f7n

+0

Вы пытаетесь получить фильмы, имеющие (по крайней мере) все те же жанры, что и «inputMovie»? – cybersam

+0

Да, я. некоторые фильмы были классифицированы как более чем один жанр. – f7n

Смежные вопросы