グラフデータベース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」をクリックする。
- 画面に表示されるActivation Keyを保存しておく(Windowsならメモ帳、macOSならテキストエディットを起動し、ActivationKey.txtというファイルを作成し、そこにコピーしておく。)
参考:Neo4j Desktop 1.4.1のインストールの「1-3」「1-4」を参照のこと。
- ダウンロードしてきたファイルをクリックし、インストールする。
Neo4j Desktopの起動_
初回起動時に先ほど保存したActivation Keyを入力する。以下のページの「3-3」を参照のこと。2回目以降はActivation keyの入力は不要となる。
Neo4j Desktopのチュートリアル_
以下の動画をみながら使ってみること。
- YouTube: Neo4jグラフデータベース入門(Neo4j 5.1を使って入門してみよう) 2022-10-29 C-4
- チュートリアルは24:00ごろから始まる。その前はグラフデータベースやNeo4jの説明となっている。
以下にチュートリアル内で使用されるコマンドを記載しているので、動画を止めつつ適宜入力して、自分の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
もっと知りたい方へ_
- Neo4j: Cypher Manual(英語):Neo4jの問い合わせ言語Cypherのマニュアル。
- クリエーションライン Tech Blog: Cypherクエリの基礎 2020 #neo4j