Permintaan Tutorial Film Neo4j

Saya sedang melihat proyek contoh film Neo4j: https://github.com/neo4j-examples/movies-java-spring-data-neo4j-4

Salah satu contoh merekomendasikan rekan aktor baru untuk Tom Hanks yaitu Temukan aktor yang belum pernah bekerja sama dengan Tom Hanks, tetapi rekan aktornya sudah pernah bekerja sama.

Pertanyaan:

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 hasil teratas adalah: Kekuatan yang Direkomendasikan Tom Cruise 5 Zach Grenier 5 Helen Hunt 4

Namun Helen Hunt dikembalikan dalam daftar rekan aktor Tom Hanks:

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

DAN Tom Hanks dikembalikan dalam daftar rekan aktor Helen Hunt:

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

Apakah ini bug di Neo4j atau dalam kueri yang diberikan dalam tutorial? Jika itu adalah bug dalam kueri Apa kueri yang benar?


person J Thomas    schedule 30.06.2016    source sumber
comment
Di mana Anda melihat kueri ini? Sepertinya saya tidak dapat menemukannya di repositori film-java-spring-data-neo4j-4   -  person Luanne    schedule 30.06.2016


Jawaban (1)


Kueri tersebut tidak menemukan orang yang belum pernah bekerja sama dengan Tom Hanks. Saya tidak yakin apa tujuan mereka di sana, tetapi untuk mencapainya Anda harus melakukan:

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;

Baris WHERE NOT (tom)-[:ACTED_IN]->(m2) dari kueri mereka tidak masuk akal; semua yang dilakukannya hanyalah menegaskan bahwa Tom Hanks tidak berakting dalam film mana pun yang dibintangi oleh rekan aktor dan rekan aktornya. Tidak ada gunanya menegaskan bahwa Tom Hanks tidak pernah bertindak dengan orang-orang yang terikat pada coCoActors.

person Nicole White    schedule 30.06.2016
comment
Cukup lucu dalam panduan mesin rekomendasi sederhana mereka memiliki yang benar bentuk pertanyaan, menyatakan Anda juga mungkin ingin menyatakan bahwa Tom Hanks tidak pernah bekerja dengan orang-orang yang direkomendasikan, tidak hanya di film yang dibintangi oleh rekan aktornya. Anda juga dapat menambahkan batasan AND id(tom)<>id(coCoActos) untuk menghindari kasus di mana coCoActors cocok kepada tom. - person Sevle; 30.06.2016