Neo4j GraphDBブートキャンプ完全版: 関係性 (セクション7/49)
Neo4jのMATCHクローズは、グラフデータベースから関係性を取得してデータを検索する上で重要な要素である。
ノード間の接続を見つける様々な方法、関係性のタイプに基づいた結果のフィルタリング、関連情報の抽出などについて説明した。
MATCHクローズを活用することで、複雑な質問に答え、データ内の価値ある洞察を発見できる。
はじめに:
このブログ記事では、Neo4jの強力なMATCHクローズについて深く掘り下げます。MATCHクローズは、グラフデータベースから関係性を取得してデータを検索する上で重要な要素です。ノード間の接続を見つける様々な方法、関係性のタイプに基づいた結果のフィルタリング、関連情報の抽出などについて見ていきましょう。それでは始めましょう!
関係性のタイプを取得する:
一般的なタスクの1つは、ノード間の関係性のタイプを取得することです。例えば、トム・ハンクスを表すノードと、彼が接続しているすべての映画ノードの間の関係性のタイプを見つけたいとします。次のCypherクエリを使用できます:
MATCH (t:Person {name: "Tom Hanks"})-[r]-(:Movie)
RETURN type(r)
このクエリは、トム・ハンクスのノードに一致し、映画ノードへのあらゆる関係をたどり、`type()`関数を使って各関係のタイプを返します。
関係性のタイプに基づくマッチング:
特定の関係性のタイプに基づいてノードを一致させることもできます。ケイトがソーシャルメディアプラットフォームでフォローしているすべての人を見つけましょう。次のクエリを使用します:
MATCH (k:Person {name: "Kate"})-[r:FOLLOWS]->(p:Person)
RETURN p.name
ここでは、Kateノードを一致させ、FOLLOWSの関係性のみを他のPersonノードまでたどり、それらの人の名前を返します。
複数の関係性のタイプを使う:
時には、複数の関係性のタイプで接続されているノードを一致させる必要があります。トニーのすべての家族や親戚を見つけるために、`|`(パイプ)演算子を使うことができます:
MATCH (t:Person {name: "Tony"})-[r:FAMILY_OF|RELATIVE_OF]-(p:Person)
RETURN p.name
このクエリは、トニーと、FAMILY_OFまたはRELATIVE_OFの関係性で接続されているすべてのPersonノードを一致させ、それらの人の名前を返します。
MATCHとCREATEを使って関係性を作成する:
既存のノード間に新しい関係性を形成するために、MATCHとCREATEを一緒に使うことができます。例えば、ロバート・ゼメキスとトム・ハンクスの間に「colleague_of」の関係性を作成するには:
MATCH (z:Person {name: "Robert Zemeckis"}), (t:Person {name: "Tom Hanks"})
CREATE (z)-[:COLLEAGUE_OF]->(t)-[:COLLEAGUE_OF]->(z)
RETURN *
このクエリは、ロバート・ゼメキスとトム・ハンクスのノードを一致させ、それらの間に双方向のCOLLEAGUE_OFの関係性を作成し、更新されたグラフを返します。
パターンに複数の関係性を使う:
より複雑な質問に答えるために、複数の関係性を含むパターンを一致させることができます。トム・ハンクスが出演した映画の監督を見つけるには:
MATCH (t:Person {name: "Tom Hanks"})-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person)
RETURN d.name
このクエリは、トム・ハンクスのノードを一致させ、ACTED_INの関係性を映画ノードまでたどり、次に反対方向のDIRECTEDの関係性を監督ノードまでたどり、彼らの名前を返します。
結論:
Neo4jのMATCHクローズは、グラフデータベースから関係性を探索してデータを取得するための柔軟で強力な方法を提供します。プロパティに基づいてノードを一致させ、特定の関係性のタイプに従い、パターンに複数の関係性を組み合わせることで、複雑な質問をすることができ、データ内の価値ある洞察を発見できます。
MATCHで可能なことの表面しかまだ触れていません。Neo4jの旅を続けていくうちに、この重要なクローズを活用してグラフデータを効果的にトラバースして分析するさらに多くの方法を発見するでしょう。ハッピーグラフィング!
この記事が気に入ったらサポートをしてみませんか?