グラフデータベースNeo4j

はじめに_

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

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

インストール_

  1. https://neo4j.com/deployment-center/ にアクセスする
  2. Neo4j Desktopをお使いのOS(macOSかWindows)に合わせてダウンロードする。
  3. アカウント登録があるので、First Name(名前)、Last Name(姓)、Email(大学発行のメールアドレス)、Company Name(大学名)を英語で入力し、CountryはJapanを選択する。その後「Download Desktop」をクリックする。
  4. 画面に表示されるActivation Keyを保存しておく(Windowsならメモ帳、macOSならテキストエディットを起動し、ActivationKey.txtというファイルを作成し、そこにコピーしておく。)

    参考:Neo4j Desktop 1.4.1のインストールの「1-3」「1-4」を参照のこと。

  5. ダウンロードしてきたファイルをクリックし、インストールする。

Neo4j Desktopの起動_

初回起動時に先ほど保存したActivation Keyを入力する。以下のページの「3-3」を参照のこと。2回目以降はActivation keyの入力は不要となる。

Neo4j Desktopのチュートリアル_

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

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

ノードの登録_

CREATE (:Person {name: 'ロイド・フォージャー'})
CREATE (:Person {name: 'アーニャ・フォージャー'})
CREATE (:Person {name: 'ヨル・フォージャー'})
CREATE (:Dog {name: 'ボンド・フォージャー'})

リレーションシップの追加_

MATCH (p1:Person {name: 'ロイド・フォージャー'}),
      (p2:Person {name: 'アーニャ・フォージャー'}),
      (p3:Person {name: 'ヨル・フォージャー'})
CREATE (p1)-[:MARRIED]->(p3)
CREATE (p2)-[:FATHER]->(p1)
CREATE (p2)-[:MOTHER]->(p3)

ノードの追加(Family)_

CREATE (:Family {name: 'フォージャー'})

既存のノードへのリレーションシップの一括追加_

MATCH (family:Family {name: 'フォージャー'})
MATCH (person:Person)
CREATE (family)-[:FAMILY]->(person)

既存のノードへのリレーションシップの一括追加(その2)_

MATCH (family:Family {name: 'フォージャー'})
MATCH (dog:Dog)
CREATE (family)-[:FAMILY]->(dog)

属性の追加_

MATCH (p2:Person {name: 'アーニャ・フォージャー'})
SET p2.age = 6

ノードの追加(声優)_

MATCH (p1:Person {name: 'ロイド・フォージャー'}),
      (p2:Person {name: 'アーニャ・フォージャー'}),
      (p3:Person {name: 'ヨル・フォージャー'}),
      (d:Dog {name: 'ボンド・フォージャー'})
CREATE (p1)-[:VOICE]->(:VoiceActor {name: '江口拓也'})
CREATE (p2)-[:VOICE]->(:VoiceActor {name: '種﨑敦美'})
CREATE (p3)-[:VOICE]->(:VoiceActor {name: '早見沙織'})
CREATE (d)-[:VOICE]->(:VoiceActor {name: '松田健一郎'})

ノードの追加(他担当作品)_

MATCH (v1:VoiceActor {name: '種﨑敦美'})
MERGE (v1)-[:VOICE]->(:Tv {name: '機動戦士ガンダム 鉄血のオルフェンズ'})

検索例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)_

ノードの削除の前にリレーションシップを削除する必要がある。VOICEリレーションを削除する。

MATCH (n)-[v:VOICE]->()
DELETE v

ノードの削除(Tv)_

MATCH (v:Tv)
DELETE v

すべてのノードとリレーションシップの削除_

MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n, r

もっと知りたい方へ_

戻る_