【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です。
上記のクエリを実行すると、以下のような結果が表示されます。
「Taro」と「Taro」をFOLLOW
しているノード、それからそのリレーションが表示されました。
フォロワーのフォロワーまで検索
次は、2段階分、FOLLOW
しているノードをFOLLOW
しているノードまでを表示してみたいと思います。
以下のようなクエリを実行するとFOLLOW
しているノードを2段階まで表示することができます。
MATCH p=()-[:FOLLOW *1..2]->({id:'Taro'}) RETURN p
ここで*1..2
の部分が、2段階まで表示することを指定している部分です。
クエリを実行すると、以下のような結果が表示されます。
少し見づらい部分もありますが、どのノードもFOLLOW
リレーションが1回か2回で「Taro」に到達しているのが見て取れると思います。
フォローしている人を検索してみる!
フォローしている人を検索
ここまで、「Taro」をFOLLOW
しているノードを表示してきましたが、今度は、「Taro」がFOLLOW
しているノードを表示してみたいと思います。
以下のクエリを入力して実行してみてください。
MATCH p=({id:'Taro'})-[:FOLLOW]->() RETURN p
先ほどとは異なり、今度は、FOLLOW
元のid
が「Taro」であるFOLLOW
リレーションを検索しています。
実行結果は以下の通り。
「Taro」がFOLLOW
している2つのノードと、そのFOLLOW
リレーションが表示されました。
フォローしている人がフォローしている人まで検索
続いて、「Taro」がFOLLOW
しているノードと、さらにそのノードがFOLLOW
しているノードを表示してみたいと思います。
以下のようにクエリを入力して、実行してください。
MATCH p=({id:'Taro'})-[:FOLLOW *1..2]->() RETURN p
実行結果は以下の通り。
狙い通り、「Taro」がFOLLOW
している2つのノードに加えて、その2つのノードがFOLLOW
している「Hanako」と、そのFOLLOW
リレーションが表示されました。
双方向のフォローを検索してみる!
双方向フォロー検索 - 1ステップ
最後に、「Taro」がFOLLOW
している、またはFOLLOW
されているリレーションを検索してみます。
以下のクエリを実行してみてください。
MATCH p=({id:'Taro'})-[:FOLLOW]-() RETURN p
先ほどのクエリと似ていますが、FOLLOW
先の手前にあった>
の記号が抜けています。
>
記号をなくすことで、双方向のFOLLOW
リレーションを検索することができます。
実行結果は以下の通りになります。
どのノードも「Taro」に1ステップのリレーションでつながっていることが確認できます。
双方向フォロー検索 - 2ステップ
ここまで同様、2ステップ先の検索も見ておきたいと思います。
以下のクエリで、2ステップ先までの双方向のFOLLOW
リレーションを検索することができます。
MATCH p=({id:'Taro'})-[:FOLLOW *1..2]-() RETURN p
結果は以下の通りです。
少し複雑でわかりにくいですが、どのノードともFOLLOW
リレーションがない「Tomoko」を除いて、「Taro」は2ステップ先までのリレーションで、他のノードとつながっていることがわかります。
サンプルコード
以下のリポジトリに「Dockerで試すNeo4j」シリーズ全話分のコードを設置しています。
うまく動かない場合は、上記のリポジトリをクローンして試してみてください。
まとめ
今回は、データ検索の要となるMATCH
クエリの詳細な使い方を紹介してみました。
他のDBだと面倒そうな、複雑なリレーションも、Neo4jなら簡単に検索できてしまいます!
次回からは、JavaScriptを使って指定のPerson
のリレーションを検索する簡易アプリを作成していきたいと思います。
アプリの作成を通して、JavaScriptとの連携について解説していきたいと思います。
↓ 「Dockerで試すNeo4j」シリーズ記事一覧はこちら