Neo4j Movie Tutorial query

Я смотрю пример проекта фильма Neo4j: https://github.com/neo4j-examples/movies-java-spring-data-neo4j-4.

Один из примеров рекомендует новых со-актеров для Тома Хэнкса, то есть найти актеров, с которыми Том Хэнкс еще не работал, но есть у его со-актеров.

Запрос:

MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
      (coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cocoActors)
WHERE NOT (tom)-[:ACTED_IN]->(m2)
RETURN cocoActors.name AS Recommended, count(*) AS Strength ORDER BY Strength DESC

Три лучших результата: Рекомендуемая сила Том Круз 5 Зак Гренье 5 Хелен Хант 4

Однако Хелен Хант возвращается в список со-актеров Тома Хэнкса:

MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) RETURN coActors.name

И Том Хэнкс возвращается в список со-актеров Хелен Хант:

MATCH (tom:Person {name:"Helen Hunt"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) RETURN coActors.name 

Это ошибка в Neo4j или в запросе, приведенном в руководстве? Если это ошибка в запросе Каков правильный запрос?


person J Thomas    schedule 30.06.2016    source источник
comment
Где вы видите этот запрос? Я не могу найти его в репозитории movies-java-spring-data-neo4j-4   -  person Luanne    schedule 30.06.2016


Ответы (1)


Этот запрос не находит людей, с которыми Том Хэнкс еще не работал. Я не уверен, что они там собирались, но для этого вам нужно сделать:

MATCH (tom:Person)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coActors:Person),
      (coActors)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActors:Person)
WHERE tom.name = 'Tom Hanks' AND
      NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActors)
RETURN coCoActors.name AS recommended, count(*) AS strength 
ORDER BY strength DESC;

Строка WHERE NOT (tom)-[:ACTED_IN]->(m2) из их запроса на самом деле не имеет никакого смысла; все, что он делает, это утверждает, что Том Хэнкс не снимался ни в одном из фильмов, в которых его со-актеры и со-актеры играли вместе. Это не означает, что Том Хэнкс никогда не действовал с людьми, связанными с coCoActors.

person Nicole White    schedule 30.06.2016
comment
Достаточно забавно, что в руководстве по простому механизму рекомендаций есть правильный форма запроса, указав. Также вы, вероятно, захотите заявить, что Том Хэнкс никогда не работал с рекомендованными людьми, а не только в фильмах, в которых работали его со-актеры. Вы также можете добавить ограничение AND id(tom)<>id(coCoActos), чтобы избежать случаев, когда совпадение coCoActors Тому. - person Sevle; 30.06.2016