グラフデータベースNeo4j

はじめに_

グラフデータベースNeo4jを触ってみる回です。

Neo4jは以下のデータベース管理システムのランキングでもわかるとおりグラフデータベースで最も使われているデータベースです。

インストール_

  1. https://neo4j.com/deployment-center/ にアクセスする
  2. 「Product」をクリックし「Deployment Center」のアイコンをクリックする
  3. Neo4j Desktopをお使いのOS(macOSかWindows)に合わせてダウンロードする。
  4. アカウント登録があるので、First Name(名前)、Last Name(姓)、Email(大学発行のメールアドレス)、Company Name(大学名)を英語で入力し、CountryはJapanを選択する。その後「Download Desktop」をクリックする。
  5. ダウンロードしてきたファイルをクリックし、インストールする。

Neo4j Desktopの起動_

インストール修了後は自動的に起動する。

Neo4j Desktopのチュートリアル_

以下の動画をみながら使ってみること。

以下にチュートリアル内で使用されるコマンドを記載しているので、動画を止めつつ適宜入力して、自分のNeo4j Desktopで確認してみること。なお、チュートリアル中で登場する例はSPY x Familyに由来する。登場人物はSPY x Family: Characterを参照のこと。

データベースの作成_

  1. neo4j Desktopを起動する。
  2. 「Data Servicies」の「Local instances」をクリックし、画面に表示される「Create instance」のボタンを押す。
  3. 新しく表示される画面で以下を入力する。
    • Instance name:「SPY x Family」
    • Neo4j version:標準のまま(入力不要)
    • Database user:neo4j
    • Password: 適当なパスワードを入力する
  4. 「Create」のボタンを押して、インスタンスを生成する。
  5. 生成されたインスタンス「SPY x Family」(「Local instances」の項に存在するインスタンスが一覧表示されている)が「RUNNING」状態であることを確認し、「Connect」のプルダウンメニューから「Query」を選択する。
  6. Query画面が開く(「Tools」の「Query」の項をクリックするとこの画面になる)。
  7. この画面で命令を入力する。

ノードの登録_

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 を選んでグラフを可視化してみる。

もっと知りたい方へ_

戻る_