1. ホーム
  2. 機械学習

Neo4jのインストールと簡単な使い方

2022-03-02 02:58:37
<パス

I. Neo4jとグラフデータベースの紹介

neo4jは、グラフデータベースを記述するためのJavaベースの言語である。グラフとは、ノードとそのノードを結ぶ関係の集合のことである。グラフデータベースは、グラフデータベース管理システムまたはGDBMSとしても知られています。
Neo4jは有名なグラフデータベースです。その他、Oracle NoSQL Database、OrientDB、HypherGraphDB、GraphBase、InfiniteGraph、AllegroGraphなどがある。

Neo4jグラフデータベースの主な構成要素は以下の通りです。

  • ノード:グラフの基本単位である。キーと値のペアを持つ属性を含む
  • リレーションシップ:2つのノードを結ぶもので、単方向と双方向の方向がある。各リレーションシップには、「開始ノード」(from node)と「終了ノード」(end node)が含まれる。また、リレーションシップには、属性をキーと値のペアとして含めることができます。
  • 属性:グラフのノードと関係を記述するために使用されるキーと値のペアです。キー = 値、ここでキーは文字列で、値は任意のNeo4jデータ型を使用して表現することができます。
  • タグ:ノードを集合にグループ化する。共通の名前をノードまたはリレーションシップのセットに関連付ける。ノードまたはリレーションシップには、1つまたは複数のタグを含めることができる。既存のノードまたはリレーションシップに新しいタグを作成できる。既存のノードまたはリレーションシップから既存のタグを削除することができる。
  • データブラウザ。CQLコマンドを実行し、出力結果を表示するために使用します。

II. Neo4jのインストール

私の環境はWin10なので、以下はWin10へのインストールを説明します。

2.1 Java JDKのインストール

neo4j は Java で書かれたグラフィカルなデータベースであり、実行時に JVM プロセスを起動する必要があるため、JAVA SE 用の JDK をインストールする必要があります。 JAVA SE JDK ダウンロード
インストール後、cmdタイプ java -version をクリックして、インストールされているかどうかを確認します。

2.2 Neo4jのダウンロードとインストール

Neo4jのダウンロードはこちらから 公式サイト Neo4j Communityの最新版をダウンロードする。ダウンロードには会員登録が必要です
ダウンロードして、置きたいディスクなどに解凍してください。E:\Program Files (x86)\neo4j-community-3.4.0

Neo4j アプリケーションの主なディレクトリ構成は、以下のとおりです。

  • binディレクトリ: Neo4jの実行ファイルを格納するディレクトリです。
  • conf ディレクトリ: Neo4j の起動を制御するための設定ファイルです。
  • data ディレクトリ: コアデータベース・ファイルを格納するために使用されます。
  • plugins ディレクトリ: Neo4j のプラグインを格納します。

2.3 システム環境変数の作成

computer-propertiesにシステム環境変数を作成する NEO4J_HOME を設定し、ホームディレクトリ(E: \Program Files (x86)✰neo4j-community-3.4.0 )に変数の値を設定してください。

NEO4J_HOME=E:\Program Files (x86)\neo4j-community-3.4.0


次に、パスに %NEO4J_HOME%\bin .

2.4 Neo4jの起動と停止

方法1:コンソールからNeo4jアプリケーションを起動する

CMD管理者として実行(必ず管理者としてCMDを入力してください、そうしないと警告が表示されます。警告 このコマンドは管理者権限で実行されていないようです。一部のコマンドは失敗する可能性があります(例:Start/Stop)
入力してください。

neo4j.bat console

方法2:Neo4jをサービスとしてインストールする

サービスのインストールとアンインストール

neo4j install-service
neo4j uninstall-service


サービスの開始、サービスの停止、サービスの再起動、サービスの状態の問い合わせを行う。

neo4j start
neo4j stop
neo4j restart
neo4j status


(なお、ここに問題がある可能性があるので、https://blog.csdn.net/weixin_42103075/article/details/80473283 を参照し、直らない場合は 管理者として (cmdを実行)
ブラウザで http://localhost:7474 を開くと、デフォルトでジャンプします。 http://localhost:7474/browser、Neo4jのインターフェースが表示されれば、インストールは成功です。
初期パスワード:neo4j 中に入ると、パスワードを変更することができます

もし neo4j stop は、neo4jを停止することができません。
使用方法 kill -s 9 を使用すると、プロセスを強制的に終了させることができます。

2.5 データベースの切り替え

neo4jを起動するたびに、1つのデータベースしか読み込むことができません。デフォルトではGraph.dbデータベースです。

方法1:設定ファイルを修正する

Neo3.x を使用すると、既存のデータベースを削除せずに新しいデータベースを作成することができるので、単に $NEO4J_HOME\conf を検索してください。 dbms.active_database= 別の名前に置き換えて、再度neo4jを起動します。今度は、そのディレクトリ名の下に新しいデータベースが作成されます。以前のデータベースへ戻すには、この手順を繰り返し、設定ファイルの新しい値を graph.db に置き換えるだけです。
注意:neo4jの起動中に設定ファイルを変更した場合、ブラウザのページを更新するために一旦再起動する必要があります。

方法2:ソフトコネクションを作成する

linux での方法の詳細は、https://blog.csdn.net/programmer_at/article/details/69570987 を参照してください。

III. Neo4jのCQL操作

CQLとは、Cypher Query Languageの略です。Oracle DatabaseにSQLというクエリ言語があるように、Neo4jにもCQLというクエリ言語があります。

Neo4jを起動した後、ソフトウェアのウィンドウでデータベースの作成場所を選択すると、Neo4jが自動的にデータベースを作成してくれます。

  • リレーショナル・データベースにおけるプライマリー・キーのような、インデックス効果を持つ一意性制約を作成します。これは、まだデータベースにデータが挿入されていないときにのみ設定できることに注意してください。

    CREATE CONSTRAINT ON (a:Person) ASSERT a.name IS UNIQUE;
    

  • インデックスを作成します。

    CREATE INDEX ON :Person(name);
    

  • すべてのノード数とエッジ数の表示

    MATCH (n) RETURN count(n);
    
    
    
    MATCH ()-->() RETURN count(*);
    

  • ノードを挿入します。Person」カテゴリのノードを挿入し、このノードには属性名と属性値 Andres が設定されています。

    CREATE (n:Person { name : 'Andres'});
    

  • エッジを挿入します。エッジクラスがFollowであるaからbへの有向エッジを挿入する。

    MATCH (a:Person),(b:Person)
    
    
    
    WHERE a.name = 'Node A' AND b.name = 'Node B'
    
    
    
    CREATE (a)-[r:Follow]->(b);
    

  • ノードを更新します。Person」カテゴリのノードを新しい名前で更新します。

    MATCH (n:Person { name: 'Andres' })
    
    
    
    SET n.name = 'Taylor';
    

  • ノードとその接続エッジの削除 Neo4j では、ノードに接続されたエッジがある場合、ノードだけを削除することはできま せん。

    MATCH (n:Person { name:'Andres' })
    
    
    
    DETACH DELETE n;
    

  • エッジを削除します。

    MATCH (a:Person)-[r:Follow]->(b:Person)
    WHERE a.name = 'Andres' AND b.name = 'Taylor'
    DELETE r;
    
    
    

グラフデータベースとして、いくつかのユニークなクエリ文があります。

  • 最短経路。

    MATCH (ms:Person { name:'Andres' }),(cs:Person { name:'Taylor' }), p = shortestPath((ms)-[r:Follow]-(cs)) RETURN p;
    
    
    
    
  • 2つのノードの関係を問い合わせる。

    MATCH (a:Person { name:'Andres' })-[r]->(b:Person { name:'Taylor' }) 
    RETURN type( r);
    
    
    
  • あるノードのすべてのFollowerを問い合わせます。

    MATCH (:Person { name:'Taylor' })-[r:Follow]->(Person)
    RETURN Person.name;
    
    
    
  • すべてのデータをクリアする(すべてのノードとリレーションシップを削除する)

    MATCH (n)
    OPTIONAL MATCH (n)-[r]-()
    DELETE n,r
    
    
    

    上記の方法でノードとリレーションの両方が削除されますが、この削除では一部の情報(Propertyキーなど)が消去されずに残ってしまうため、linuxでは以下の方法でデータベースを完全削除しています。

    >bin/neo4j stop
    >rm -rf data/databases/graph.db
    >bin/neo4j start
    
    
    

    Windowsでは、data/databases/graph.dbやその他の指定されたdbにあるデータをすべて削除することができます。

その他は、以下のNeo4jユーザーマニュアルをご覧ください。 Neo4j ドキュメント

IV. csvファイルのインポート

まず、MySQLデータベースからcsvファイルをエクスポートし、インポートフォルダにコピーします。 E:\Program Files (x86)\neo4j-community-3.4.0\import を実行し、次のステートメントを実行します。

//import node Movie type == note type conversion
LOAD CSV WITH HEADERS FROM "file:///genre.csv" AS line
MERGE (p:Genre{gid:toInteger(line.gid),name:line.gname})
	

//import nodes Actor information	
LOAD CSV WITH HEADERS FROM 'file:///person.csv' AS line
MERGE (p:Person { pid:toInteger(line.pid),birth:line.birth,
death:line.death,name:line.name,
biography:line.biography,
birthplace:line.birthplace})


// Import node movie information
LOAD CSV WITH HEADERS FROM "file:///movie.csv" AS line  
MERGE (p:Movie{mid:toInteger(line.mid),title:line.title,introduction:line.introduction,
rating:toFloat(line.rating),releasedate:line.releasedate})


// import relationship actedin who acted in the movie 1-to-many
LOAD CSV WITH HEADERS FROM "file:///person_to_movie.csv" AS line 
match (from:Person{pid:toInteger(line.pid)}),(to:Movie{mid:toInteger(line.mid)})  
merge (from)-[r:actedin{pid:toInteger(line.pid),mid:toInteger(line.mid)}]->(to)
	
//import relationship What type is the movie == 1 to many
LOAD CSV WITH HEADERS FROM "file:///movie_to_genre.csv" AS line
match (from:Movie{mid:toInteger(line.mid)}),(to:Genre{gid:toInteger(line.gid)})  
merge (from)-[r:is{mid:toInteger(line.mid),gid:toInteger(line.gid)}]->(to)


参考URLです。
W3Cschool-neo4jチュートリアル (推奨)
Neo4j公式チュートリアル (推奨)
Neo4jの概要
win10にneo4jをインストールする
Neo4jインストール&スタート&いくつかの長所と短所
映画知識グラフに基づくスマートなクイズシステム (II) - Neo4jによるCSVファイルの取り込み (連載, 非常に完成度の高い, java+spark)