グラフデータベースNeo4j
はじめに_
グラフデータベースNeo4jを触ってみる回です。
Neo4jは以下のデータベース管理システムのランキングでもわかるとおりグラフデータベースで最も使われているデータベースです。
インストール_
- https://neo4j.com/deployment-center/ にアクセスする
- 「Product」をクリックし「Deployment Center」のアイコンをクリックする
- Neo4j Desktopをお使いのOS(macOSかWindows)に合わせてダウンロードする。
- アカウント登録があるので、First Name(名前)、Last Name(姓)、Email(大学発行のメールアドレス)、Company Name(大学名)を英語で入力し、CountryはJapanを選択する。その後「Download Desktop」をクリックする。
- ダウンロードしてきたファイルをクリックし、インストールする。
Neo4j Desktopの起動_
インストール修了後は自動的に起動する。
Neo4j Desktopのチュートリアル_
以下の動画をみながら使ってみること。
- YouTube: Neo4j Desktop 2 ではじめる!Neo4j グラフデータベース 2025 入門 2025-10-18 A-2
- チュートリアルは22:00ごろから始まる。その前はグラフデータベースやNeo4jの説明となっている。
以下にチュートリアル内で使用されるコマンドを記載しているので、動画を止めつつ適宜入力して、自分のNeo4j Desktopで確認してみること。なお、チュートリアル中で登場する例はSPY x Familyに由来する。登場人物はSPY x Family: Characterを参照のこと。
データベースの作成_
- neo4j Desktopを起動する。
- 「Data Servicies」の「Local instances」をクリックし、画面に表示される「Create instance」のボタンを押す。
- 新しく表示される画面で以下を入力する。
- Instance name:「SPY x Family」
- Neo4j version:標準のまま(入力不要)
- Database user:neo4j
- Password: 適当なパスワードを入力する
- 「Create」のボタンを押して、インスタンスを生成する。
- 生成されたインスタンス「SPY x Family」(「Local instances」の項に存在するインスタンスが一覧表示されている)が「RUNNING」状態であることを確認し、「Connect」のプルダウンメニューから「Query」を選択する。
- Query画面が開く(「Tools」の「Query」の項をクリックするとこの画面になる)。
- この画面で命令を入力する。
ノードの登録_
INSERT (:Person {name: 'ロイド・フォージャー'})
INSERT (:Person {name: 'アーニャ・フォージャー'})
INSERT (:Person {name: 'ヨル・フォージャー'})
INSERT (:Dog {name: 'ボンド・フォージャー'})
登録したノードの確認_
MATCH (n) RETURN n
リレーションシップの追加_
MATCH (p1:Person {name: 'ロイド・フォージャー'}),
(p2:Person {name: 'アーニャ・フォージャー'}),
(p3:Person {name: 'ヨル・フォージャー'})
INSERT (p1)-[:MARRIED]->(p3)
INSERT (p2)-[:FATHER]->(p1)
INSERT (p2)-[:MOTHER]->(p3)
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
属性の追加_
Queryで以下を入力する。
MATCH (n:Person {name: 'アーニャ・フォージャー'})
SET n.age = 6
以下を実行し、ノード「アーニャ・フォージャー」にageのプロパティが追加されていることを確認する。
MATCH (n) RETURN n
ノードの追加(声優)_
Queryで以下を入力する。
MATCH (p1:Person {name: 'ロイド・フォージャー'}),
(p2:Person {name: 'アーニャ・フォージャー'}),
(p3:Person {name: 'ヨル・フォージャー'}),
(d:Dog {name: 'ボンド・フォージャー'})
INSERT (p1)-[:VOICE]->(:VoiceActor {name: '江口拓也'})
INSERT (p2)-[:VOICE]->(:VoiceActor {name: '種﨑敦美'})
INSERT (p3)-[:VOICE]->(:VoiceActor {name: '早見沙織'})
INSERT (d)-[:VOICE]->(:VoiceActor {name: '松田健一郎'})
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
ノードの追加(他担当作品)_
Queryで以下を入力する。
MATCH (v1:VoiceActor {name: '種﨑敦美'})
INSERT (v1)-[:Tv]->(:Tv {name: '機動戦士ガンダム 鉄血のオルフェンズ'})
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
ノードの追加(他担当作品)_
MATCH (v1:VoiceActor {name: '種﨑敦美'})
MERGE (v1)-[:VOICE]->(:Tv {name: '機動戦士ガンダム 鉄血のオルフェンズ'})
参考コマンド例(動画外のコマンド)_
動画で作成したデータベースを用いて、動画外のコマンド例を試してみる。
ノードの追加(Family)_
INSERT (:Family {name: 'フォージャー'})
既存のノードへのリレーションシップの一括追加_
MATCH (family:Family {name: 'フォージャー'})
MATCH (person:Person)
INSERT (family)-[:FAMILY]->(person)
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
既存のノードへのリレーションシップの一括追加(その2)_
MATCH (family:Family {name: 'フォージャー'})
MATCH (dog:Dog)
INSERT (family)-[:FAMILY]->(dog)
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
検索例1_
(フォージャー)家族が飼っている犬の名前は?
MATCH (:Family)--(d:Dog) RETURN d.name
検索例2_
(フォージャー)家族が飼っている犬は?(ノードが返り値)
MATCH (:Family)--(d:Dog) RETURN d
検索例3_
(フォージャー)家族からたどれるテレビ番組は?
MATCH (:Family)-[*]-(tv:Tv) RETURN tv
検索例4_
(フォージャー)家族からFAMILYあるいはVOICEリレーションでたどれるテレビ番組は(最大10ホップ)?
MATCH (:Family)-[:FAMILY|VOICE*..10]-(tv:Tv) RETURN tv
検索例5_
(フォージャー)家族からFAMILYあるいはVOICEリレーションでたどれる声優は?
MATCH (:Family)-[:FAMILY|VOICE*..10]-(v:VoiceActor) RETURN v
検索例5_
人間の数は?
MATCH (p:Person) RETURN count(*)
リレーションシップの削除(VOICE, Tv)_
ノードの削除の前にリレーションシップを削除する必要がある。VOICEリレーションを削除する。
MATCH (n)-[v:VOICE]->() DELETE v
MATCH (n)-[v:Tv]->() DELETE v
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
ノードの削除(Tv, VoiceActor)_
MATCH (v:Tv) DELETE v
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
MATCH (v:VoiceActor) DELETE v
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
すべてのノードとリレーションシップの削除_
MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n, r
「Tools」の「Explore」を選択し、any - any - any を選んでグラフを可視化してみる。
もっと知りたい方へ_
- Neo4j: Cypher Manual(英語):Neo4jの問い合わせ言語Cypherのマニュアル。
- クリエーションライン Tech Blog: Cypherクエリの基礎 2020 #neo4j