คำถามเกี่ยวกับการสอนภาพยนตร์ Neo4j

ฉันกำลังดูโครงการตัวอย่างภาพยนตร์ Neo4j: https://github.com/neo4j-examples/movies-java-spring-data-neo4j-4

ตัวอย่างหนึ่งแนะนำนักแสดงร่วมคนใหม่ของ Tom Hanks เช่น ค้นหานักแสดงที่ Tom Hanks ยังไม่เคยร่วมงานด้วย แต่มีนักแสดงร่วมของเขา

แบบสอบถาม:

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

อย่างไรก็ตาม Helen Hunt กลับมาอยู่ในรายชื่อนักแสดงร่วมของ Tom Hanks:

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

และ Tom Hanks กลับมาอยู่ในรายชื่อนักแสดงร่วมของ Helen Hunt:

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)


ข้อความค้นหานั้นไม่พบบุคคลที่ 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

person Nicole White    schedule 30.06.2016
comment
ตลกดีพอแล้วในคำแนะนำเกี่ยวกับเครื่องมือแนะนำง่ายๆ พวกเขามีความถูกต้อง รูปแบบของข้อความค้นหา โดยระบุ นอกจากนี้ คุณอาจต้องการระบุด้วยว่า Tom Hanks ไม่เคยร่วมงานกับบุคคลที่แนะนำ ไม่ใช่แค่ในภาพยนตร์ที่นักแสดงร่วมของเขาทำงานด้วย คุณยังสามารถเพิ่มข้อจำกัด AND id(tom)<>id(coCoActos) เพื่อหลีกเลี่ยงกรณีที่ coCoActors ตรงกัน ถึงทอม - person Sevle; 30.06.2016