#始めに
advent calendarに乗じて、興味があったがあまり触れていなかったグラフDBを少し触ってみようと思い、この題材になりました☺️
映画の出演者が出ている他の映画を簡単に検索できるような物を作成します。(今後も、絶対Wikipediaを使います。🥳)
neo4jとは https://neo4j.com
様々な要素同士の関係性を扱えるDB
RDBではなく、GraphDB
無向グラフ.(有向グラフも扱うことはできるが、非推奨)
Wikipediaとかがいい例
アイアンマン(映画) -> ロバートダウニー・Jr -> アベンジャーズ
->キャプテンアメリカ -> (以下ループ)
データの作成
まず、映画と出演者のデータを作成します。
今回はneo4jのSample Dataを利用します。
$ :play movie graph
Web Consoleに上記を入力します。
すると、2ページ目にSample Dataを作成するためのQuery(Cypher)が表示されます。(以下Cypher)
Cypherが書かれているTextBoxをクリックするとConsoleに自動入力され、実行できます。
実際の作成後が以下になります。
##特定の映画の出演者の他の出演作品を表示する。
まず、特定の映画の出演者を表示してみましょう。(今回は、マトリックスです。)
以下のCypherを実行します。
$ MATCH(n:Movie{title:"The Matrix"})<-[r:ACTED_IN]-(m:Person) return n,m
を実行します。
すると,The Matrixの出演者が表示されます。
次にこの演者が出ている他の映画を表示します。
以下Cypherを実行します
MATCH(n:Movie{ title:"The Matrix"})<-[r:ACTED_IN]-(m:Person)-[d:ACTED_IN]->(s:Movie) return n,m,s
これで、The Matrixの出演者の他の出演作品を取得することができました。
neo4jでは、tableなどグラフ以外の表示が可能なので、必要な情報に絞って表示します。
MATCH(n:Movie{ title:"The Matrix"})<-[r:ACTED_IN]-(m:Person)-[d:ACTED_IN]->(s:Movie) return m.name,s.title
上記のCypherの結果が以下です。
これで、The Matrixの出演者の他の出演作品が一覧で確認できるようになりました。(マトリックスが3部作とは知らなかった、、、🤔)
#最後に
neo4jのWeb Consoleを触りましたが、様々なプログラミング言語で利用できます。
neo4jでないですが、グラフDBはパナマ文書の解析やFacebookなどにも使われています。
今後、グラフDBを用いて面白い物が作成できればと思います。