Neo4jとは?
-
人と物、物と人など、様々なオブジェクトとの関係性を扱えるデータベースシステム
-
Wikipediaがいい例
例: 新垣結衣が出演しているドラマを探す→逃げ恥が代表作→逃げ恥の出演者は→星野源→星野源の楽曲は→SUN→SUNが主題歌のドラマは→心がポキッとね→(以下ループ)
-
データ構造は従来のRDBとは違い、GraphDB(NoSQL)という形式。大量のデータを扱える上にメンテナンス不要
クエリはどうするか
データベースの一種なのでクエリ(問い合わせ言語)が存在する
クエリはCypherという言語を使う。SQLのようなもの。
何者の相関図を作ってみる
関係性を可視化できる特性を生かすと、コードベースで相関図を簡単に作ることができます。
佐藤健主演の映画「何者」の人物相関図を作ってみました。
例えばこんなコードで。上から地道に実行すると同じものができます。足りないところあったらすみません。
コメントは//
でできます
// ノード(登場人物)を追加
CREATE (:Character{name:"二宮拓人"}), (:Character{name:"田名部瑞月"}), (:Character{name:"神谷光太郎"}), (:Character{name:"サワ先輩"}), (:Character{name:"小早川理香"}), (:Character{name:"宮本隆良"});
// 関係性を追加
MATCH (a:Character{name:"二宮拓人"}),(b:Character{name:"田名部瑞月"}) CREATE UNIQUE (a) -[:片思い] -> (b);
MATCH (a:Character{name:"二宮拓人"}),(c:Character{name:"サワ先輩"}) MERGE (a) -[:慕っている]-> (c);
MATCH (a:Character{name:"二宮拓人"}),(d:Character{name:"小早川理香"}) MERGE (a) -[:冷ややかな目で見る]-> (d);
MATCH (a:Character{name:"二宮拓人"}),(e:Character{name:"宮本隆良"}) MERGE (a) -[:冷ややかな目で見る]-> (e);
MATCH (a:Character{name:"宮本隆良"}),(b:Character{name:"二宮拓人"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"宮本隆良"}),(b:Character{name:"田名部瑞月"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"宮本隆良"}),(b:Character{name:"神谷光太郎"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"二宮拓人"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"田名部瑞月"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"神谷光太郎"}) MERGE (a) -[:見下す]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"宮本隆良"}) MERGE (a) -[:同棲中]-> (b);
MATCH (a:Character{name:"小早川理香"}),(b:Character{name:"宮本隆良"}) MERGE (b) -[:同棲中]-> (a);
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"二宮拓人"}) MERGE (a) -[:ルームメイト]-> (b);
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"二宮拓人"}) MERGE (b) -[:ルームメイト]-> (a);
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"田名部瑞月"}) MERGE (a) -[:元カノ]-> (b);
// クエリ内で"?"は使えない
MATCH (a:Character{name:"神谷光太郎"}),(b:Character{name:"田名部瑞月"}) MERGE (b) -[:まだ好きかも]-> (a);
ググるとCypherの文法について書かれたページがいくつも出てきます。ググってみてください。
まだ少ししか触ってないので、間違っているところがあれば編集リクエストください。
ちなみに、JavaScriptではD3.jsというものと組み合わせて使うといいことがあるみたいです。そのうち書きます。