m's blog

備忘録とかメモとか

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

前回は、「Dockerで試すNeo4j」シリーズで使用するデータを追加し、MATCHクエリを使って追加したデータを簡単に確認してみました。

今回は、データ検索の要となるMATCHクエリについて、より詳細な使い方を紹介したいと思います。

↓ 「Dockerで試すNeo4j」シリーズ記事一覧はこちら

目次

はじめに

今回の記事では、前回記事で追加したデータを使用します。

データを追加していない場合は、前回記事を参考にデータを追加してください。

また、初回記事の内容に従って、Neo4jコンテナを起動し、http://localhost:57474/にアクセス・ログインしてください。

フォロワーを検索してみる!

フォロワー検索

まずは、追加したPersonノードの1つ「Taro」をFOLLOWしているPersonを検索・表示してみたいと思います。

開いたページの上部にあるクエリ入力欄に、以下のクエリを入力して実行してください。

MATCH p=()-[:FOLLOW]->({id:'Taro'}) RETURN p

FOLLOW先のidが「Taro」であるFOLLOWリレーションを表示するクエリです。

FOLLOW先の指定には他のフィールドの指定してもOKです。

上記のクエリを実行すると、以下のような結果が表示されます。

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

「Taro」と「Taro」をFOLLOWしているノード、それからそのリレーションが表示されました。

フォロワーのフォロワーまで検索

次は、2段階分、FOLLOWしているノードをFOLLOWしているノードまでを表示してみたいと思います。

以下のようなクエリを実行するとFOLLOWしているノードを2段階まで表示することができます。

MATCH p=()-[:FOLLOW *1..2]->({id:'Taro'}) RETURN p

ここで*1..2の部分が、2段階まで表示することを指定している部分です。

クエリを実行すると、以下のような結果が表示されます。

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

少し見づらい部分もありますが、どのノードもFOLLOWリレーションが1回か2回で「Taro」に到達しているのが見て取れると思います。

フォローしている人を検索してみる!

フォローしている人を検索

ここまで、「Taro」をFOLLOWしているノードを表示してきましたが、今度は、「Taro」がFOLLOWしているノードを表示してみたいと思います。

以下のクエリを入力して実行してみてください。

MATCH p=({id:'Taro'})-[:FOLLOW]->() RETURN p

先ほどとは異なり、今度は、FOLLOW元のidが「Taro」であるFOLLOWリレーションを検索しています。

実行結果は以下の通り。

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

「Taro」がFOLLOWしている2つのノードと、そのFOLLOWリレーションが表示されました。

フォローしている人がフォローしている人まで検索

続いて、「Taro」がFOLLOWしているノードと、さらにそのノードがFOLLOWしているノードを表示してみたいと思います。

以下のようにクエリを入力して、実行してください。

MATCH p=({id:'Taro'})-[:FOLLOW *1..2]->() RETURN p

実行結果は以下の通り。

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

狙い通り、「Taro」がFOLLOWしている2つのノードに加えて、その2つのノードがFOLLOWしている「Hanako」と、そのFOLLOWリレーションが表示されました。

双方向のフォローを検索してみる!

双方向フォロー検索 - 1ステップ

最後に、「Taro」がFOLLOWしている、またはFOLLOWされているリレーションを検索してみます。

以下のクエリを実行してみてください。

MATCH p=({id:'Taro'})-[:FOLLOW]-() RETURN p

先ほどのクエリと似ていますが、FOLLOW先の手前にあった>の記号が抜けています。

>記号をなくすことで、双方向のFOLLOWリレーションを検索することができます。

実行結果は以下の通りになります。

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

どのノードも「Taro」に1ステップのリレーションでつながっていることが確認できます。

双方向フォロー検索 - 2ステップ

ここまで同様、2ステップ先の検索も見ておきたいと思います。

以下のクエリで、2ステップ先までの双方向のFOLLOWリレーションを検索することができます。

MATCH p=({id:'Taro'})-[:FOLLOW *1..2]-() RETURN p

結果は以下の通りです。

【Neo4j】Dockerで試すNeo4j【第3回/検索編】

少し複雑でわかりにくいですが、どのノードともFOLLOWリレーションがない「Tomoko」を除いて、「Taro」は2ステップ先までのリレーションで、他のノードとつながっていることがわかります。

サンプルコード

以下のリポジトリに「Dockerで試すNeo4j」シリーズ全話分のコードを設置しています。

うまく動かない場合は、上記のリポジトリをクローンして試してみてください。

まとめ

今回は、データ検索の要となるMATCHクエリの詳細な使い方を紹介してみました。

他のDBだと面倒そうな、複雑なリレーションも、Neo4jなら簡単に検索できてしまいます!

次回からは、JavaScriptを使って指定のPersonのリレーションを検索する簡易アプリを作成していきたいと思います。

アプリの作成を通して、JavaScriptとの連携について解説していきたいと思います。

↓ 「Dockerで試すNeo4j」シリーズ記事一覧はこちら