MATCH (movie:Movie {name:'The Matrix'})-[:has_tag]->(movie1Tag:Tag)
WITH movie, collect(movie1Tag) AS movie1Tags
MATCH (movie2:Movie)-[:has_tag]->(movie2Tag:Tag)
WITH movie, movie1Tags, collect(movie2Tag) AS movie2Tags, movie2
WHERE ANY(movieTag IN movie1Tags
WHERE movieTag IN movie2Tags)
AND NOT movie.name = movie2.name
RETURN DISTINCT movie2.name
がWHERE ANY
の文から交差点を返す方法はありますか?それらを返すようにクエリを変更する方法はありますか?
編集: Anomaly211のおかげで答えが得られました。人々が興味を持っている場合には以下に含まれているEXTRACTを使用して関係に交点を適用しました。
MATCH (movie:Movie {name:'The Matrix'})-[:has_tag]->(movie1Tag:Tag)
WITH movie, collect(movie1Tag) AS movie1Tags
MATCH (movie2:Movie)-[:has_tag]->(movie2Tag:Tag)
WITH movie, movie1Tags, collect(movie2Tag) AS movie2Tags, movie2
WITH movie, movie1Tags, collect(movie2Tag) AS movie2Tags, movie2 FILTER(x IN movie1Tags WHERE x IN movie2Tags) AS intersect
FILTER(x IN movie1Tags WHERE x IN movie2Tags) AS intersect
WHERE ANY(movieTag IN movie1Tags WHERE movieTag IN movie2Tags) AND NOT movie.name = movie2.name AS intersect
CREATE UNIQUE (movie)-[:share_tags {shared:EXTRACT(x IN intersect | x.identifier)}]->(movie2)
RETURN DISTINCT movie2.name, intersect
を与える必要がありますか?どのように例ですか? –
ムービー1には、「アクション」、「90s」「ファンタジー」、「サイエンスフィクション」というタグがあります。映画2には、「サイエンスフィクション」、「90年代」、「コメディー」のタグがあります。だから、交差点にはタグ「サイエンスフィクション」と「90s」があります。それらは共にタグを共有します – Airomega