2016-06-30 2 views
1

私はのNeo4j映画のサンプルプロジェクトで探しています: https://github.com/neo4j-examples/movies-java-spring-data-neo4j-4のNeo4j作品チュートリアルクエリ

例の一つは、トム・ハンクスのための新たな共同行為者、すなわち トム・ハンクスがまだで働いていない役者を探す推奨していますが、彼の共演者は持っている。

問合せ:

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 

トップ3の結果は次のとおりです。 推奨強 トム・クルーズ5 ザック・グルニエ5 ヘレン・ハント4

しかしヘレン・ハントは、トム・ハンクスのリストに返されます共演者:

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

ANDハンクスは、 Helen Huntの共同俳優:

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

これはNeo4jのバグかチュートリアルの質問にありますか? クエリのバグの場合正しいクエリとは何ですか?

+0

このクエリはどこに表示されますか?私は映画 - java-spring-data-neo4j-4レポジトリで見つけられないようです。 – Luanne

答えて

2

このクエリは、Tom Hanksがまだ作業していないユーザーを見つけることではありません。私は、彼らがそこにのために行っていたかわからないんだけど、あなたがやるべきことを達成するために:

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に拘束された人々と行動したことはないと主張することは何もしない。

+0

[簡単な推薦エンジンへの案内](https://neo4j.com/developer/guide-build-a)で十分に面白いです彼らは、「あなたはおそらく、彼の共同俳優が働いていた映画だけでなく、推薦された人々と仕事をしたこともないと言いたいと思うかもしれません」と述べています。 coCoActorsがtomに一致する場合を避けるために、 'AND id(tom)<> id(coCoActos)'という制限を追加することもできます。 – Sevle