More Related Content
Similar to neo4j 触ってみた (20)
More from NipponAlgorithm (7)
neo4j 触ってみた
- 3. 環境構築・起動
docker run --rm -p 7474:7474 -p 7687:7687 ¥
--volume=$HOME/neo4j/data:/data ¥
--volume=$HOME/neo4j/conf:/conf ¥
neo4j
docker で起動
ポートを転送
ブラウザで
http://localhost:7474/
へアクセス
neo4j/neo4j
- 5. python から
import os
import neo4j # pip install neo4j
from dotenv import load_dotenv
from neo4j.graph import Node
def main():
load_dotenv()
uri = os.environ.get("URI", "bolt://localhost:7687")
user = os.environ["USERNAME"]
pw = os.environ["PASSWORD"]
driver = neo4j.GraphDatabase.driver(uri, auth=(user, pw))
names = []
with driver.session() as session:
records = session.run("match (n) return n")
for record in records:
node: Node = record["n"]
names.append(node["name"])
print(names) # ['千代田区', '中央区', ... ]
driver.close()
- 6. import os
from dotenv import load_dotenv
import neo4j
NEIGHBOURS = {
"千代田区": ["中央区", "港区", "新宿区", "文京区", "台東区"],
"中央区": ["千代田区", "港区", "台東区", "墨田区", "江東区"],
…
}
def main():
load_dotenv()
uri = os.environ.get("URI", "bolt://localhost:7687")
user = os.environ["USERNAME"]
pw = os.environ["PASSWORD"]
driver = neo4j.GraphDatabase.driver(uri, auth=(user, pw))
with driver.session() as session:
for k, vs in NEIGHBOURS.items():
for v in vs:
session.run(
"match (a:City{name:$a}), (b:City{name:$b}) create (a)-[:Neighbour]->(b)",
{"a": k, "b": v},
)
driver.close()
Editor's Notes
- まず neo4j とは何かについて説明します。
データベースの種類として、リレーショナルデータベースではない、 NoSQL というものがいくつかあり、
そのうちのグラフベースデータベースと呼ばれているものの一つです。
- 環境構築です。
普通にインストールする方法もあるようですが、Virtual Box で作成した ubuntu の中で docker を使いました。
ポートが2つ必要で、片方は vscode が自動的転送してくれたのですが、もう片方は手動で設定する必要がありました。
起動したらブラウザから管理画面を開くことが出来ます。
- こういう独自の言語で記述します。
それぞれのノードとリレーションはクラスっぽいものを持っていて、ラベルと呼ばれているようです。 Pref とか City とか付けてるやつです。
「match」は「一致」というよりは「パターンマッチ」的な考えの方が近いと思います。
最初にプレビューした段階だと、ノードの位置にただの丸が書かれていますが、右の overview からどれを表示させるか選ぶことが出来ます。
- python からだとこういう感じになります。
サンプルコードを参考にして、特に迷うことは無いと思います。
- 全部追加しました。
プレビューはこんな感じになって、ちょっとよくわからないですが、多分ちゃんと追加出来てます。
- グラフDBっぽいこと、ということで、隣の隣を取得してみました。
隣のものや、自分自身も含まれてしまっています。
隣の隣であることに変わりはないので取得できてしまっています。
- このように修正しました。
掛け算の形で、複数のリレーションを表現することも出来るらしいです。
ちゃんと望み通りのデータが取得できています。
江東区が含まれているのは大田区と接しているためです。
- (読む)