LoginSignup
1
0

Neo4j_使い始め備忘録

Posted at

これは何?

  • Neo4jの環境構築~デプロイの備忘録です。
  • Neo4jを使い始めたい方の参考になれば幸いです。

環境

今回は、ローカルからデプロイする流れをまとめます。

  • vscode
  • python 3.9.13
  • java 11.0.2
  • Neo4j 5.1.0

※javaを入れないと動きませんので注意!(以下からダウンロードしてパスを通してください)
https://jdk.java.net/archive/

Neo4j

1. アカウント作成

image.png

2. インスタンス作成

  • フリーモードでインスタンス作成します
    image.png

  • インスタンスができ、クレデンシャルをダウンロードします

    • usernameとpasswordが作成したインスタンスと紐付きます
      image.png
  • インスタンスができればOK
    image.png

  • Openを押すとworkspaceに移動します。先ほどダウンロードしたtxtファイルからpasswordを確認し入力
    image.png

  • ちなみに、txtファイルの中身はこんな感じ
    image.png

  • workspaceが開けばOK
    image.png

3. vscodeからデプロイ

  • 仮想環境を作り、先ほどのtxtファイルを同じ階層に入れておく
    image.png

  • iniファイル作成

    • neo4j.iniファイルを作成
    • txtファイルを見ながら、uri, user, passwordを設定
      image.png
  • requirements.txt用意し、Neo4jをインストール
    image.png

  • デプロイ用のコードを用意

neo4j_sample.pyファイルの中身
import configparser
from neo4j import GraphDatabase


def clear_db(tx):
    tx.run('MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r')


def search_all(tx):
    result = tx.run('MATCH (n) OPTIONAL MATCH (n)-[r]-() RETURN n,r')
    return [r for r in result]


def add_person_node(tx, name):
    tx.run('CREATE (p:Person {name: $name}) RETURN p', {'name': name})


def add_friend_relationship(tx, name, friend_name=None):
    if not friend_name:
        tx.run('CREATE (p:Person {name: $name}) RETURN p', {'name': name})
    else:
        tx.run('MATCH (p:Person {name: $name}) '
               'CREATE (p)-[:FRIEND]->(:Person {name: $friend_name})',
               name=name, friend_name=friend_name)


def main():
    # ===== neo4jの設定取得
    config = configparser.ConfigParser()
    config.read('neo4j.ini')
    uri = config['NEO4J']['uri']
    user = config['NEO4J']['user']
    password = config['NEO4J']['password']

    # neo4jドライバーの作成
    driver = GraphDatabase.driver(uri, auth=(user, password))
    with driver.session() as session:
        # データベースのクリア
        session.write_transaction(clear_db)

        # ノードの追加
        session.write_transaction(add_person_node, 'taro')

        # FRIEND関係の追加
        session.write_transaction(add_friend_relationship, 'taro', 'hanako')
        # 繰り返しで追加
        friend_list = ['jiro', 'haruka', 'sakura']
        for f in friend_list:
            session.write_transaction(add_friend_relationship, 'taro', f)

        # データの検索
        result = session.read_transaction(search_all)

    # 結果の確認
    for res in result:
        print(res)


if __name__ == '__main__':
    main()

image.png

エラー:ルーティング情報を取得できません

  • 最も手こずった箇所です

  • 私の場合、python neo4j_sample.py で実行するとルーティング情報を取得できないエラーが発生しました

    • DeprecationWarning: write_transaction has been renamed to execute_write session.write_transaction(clear_db) Unable to retrieve routing information
      image.png
  • uriを +s:// から +ssc:// に変更するとエラーが消えました

    • ▶こちらの記事を参考にしました
    • 適切な証明書(?)をダウンロードしていないため、弾かれている模様でした。実際の業務等で使用するには、別で解決策を探す必要があります。DockerからNeo4jを立ち上げたりすれば大丈夫…⁇

image.png

  • workspaceに戻るとこんな風にグラフができています(内訳はコード参照)
    image.png

学び

  • ローカルでCypher Queryを書き、デプロイするところまでは流れを掴めました
  • ただ、ルーティングエラーが気になるので、業務で使用するにはDockerから立ち上げる、またはNeo4jのデスクトップアプリをインストールするなどが必要そうです
  • あとはCypher Queryを学ぶ必要がありますね…

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0