技術系

Neo4j 試してみた -入門編-

技術系

こんにちは、なかにしです。

今回は、オープンソースのグラフDB、Neo4jを試してみようと思います!

今回は入門編として「どんなことができるか」を試してみて、次回ではグラフDBを使ったデータ分析とかをやってみようと思います。

グラフDBとは

データをノード(点)とエッジ(線)で表すデータベースです。

複雑な関係の検索が得意で、例えば「友達の友達の友達」などを簡単に取得できます。
単純な CRUD は RDB の方が向いています。

レコメンデーション や ナレッジグラフの構築などによく使用されます。

使ってみた

dockerで環境構築

services:
  neo4j:
    image: neo4j:5.26
    container_name: neo4j-practice
    ports:
      - "7474:7474"  # HTTP (Neo4j Browser)
      - "7687:7687"  # Bolt (driver接続用)
    environment:
      - NEO4J_AUTH=neo4j/password
      - NEO4J_PLUGINS=["apoc"]
      - NEO4J_dbms_security_procedures_unrestricted=apoc.*
    volumes:
      - neo4j_data:/data
      - neo4j_logs:/logs
      - ./cypher:/var/lib/neo4j/import

volumes:
  neo4j_data:
  neo4j_logs:

起動し、localhost:7474へ接続。
ログインします。

ID: neo4j
PW: password

▼ 画面が出ました。

赤矢印の部分に cypher というクエリ言語 を入力して実行し、グラフを作っていきます。

ノードとエッジの定義方法

cypher というクエリ言語を使用します。
SQLではないです。

// ステップ1: ノードを1つ作る
CREATE (:Person {name: 'アリス', age: 20});

// ステップ2: もう1つノードを作る
CREATE (:Person {name: 'ボブ', age: 22});


// ステップ3: 2つをエッジでつなぐ
// MATCH で既存ノードを探して、CREATE で関係を作る
MATCH (a:Person {name: 'アリス'}),
      (b:Person {name: 'ボブ'})
CREATE (a)-[:KNOWS]->(b);

これで、「ボブ」と「アリス」のノードが作成され、
アリスはボブを「Knows」、つまり一方的に知っているという関係でつながれました。

直感的でいいですね。JSっぽい。

GUIで見る

早速つくったものを見ていきましょう。

先ほどの赤矢印の部分に、cypher を入力しました。

作るだけでは、グラフは表示されません。

cypher で以下を入力してグラフを表示するか、上記画像の赤矢印の部分をクリックすると、現在のグラフが表示されます。

MATCH (n)-[m]->(s)
RETURN n,m,s

いいですね。
ちゃんとアリスはボブを一方的に知っています。

さらに拡張

なかにし高校を取り巻く先生と生徒を表現してみました。

おわりに

とにかく、見た目がかっこいいですよね。

今回は基本的なやり方が分かったので、次回はこのグラフを使って何ができるのか、という所まで踏み込んでいきたいと思います。

今回はここまで!
Enjoy Hacking!

タイトルとURLをコピーしました