Amazon

2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

最近のトラックバック

無料ブログはココログ

Amazon2

« Neo4jを試してみる(データの追加削除・検索 等) <ガンダム> | トップページ | Neo4jを.NET(C#)から操作する »

2017年10月 2日 (月)

Neo4jで色々クエリを書いてみる<ガンダム>

さて、前回はNeo4jをインストールするところまでやりました。今回は色々とクエリを
流して遊んでみたいと思います。ネタは勿論ガンダムです(笑





前回まで
  Neo4jをUbuntuにインストールする
  Neo4jを試してみる(データの追加削除・検索 等) <ガンダム>


さて、それでは早速Neo4jのCyper Query Language(CQL)がSQLと比べてどう面白いかを色々試してみたいと思います。

・誰かから愛されている人

最初は誰かから愛されている人を調べてみましょう。

match(f)-[:love]->(t) return t;

20170925_neo4j_01



う~ん。意外と相思相愛な人が多そう。

しかし、このクエリーのシンプルさ! f(rom) loves t(o) を表現するのがここまで簡単にできるとは。。。
SQLで書こうとすると、リレーションテーブルがあるとして、



ってな感じ(試してない)でしょうか。明らかにSQLの方が難しいです。



・ラブラブな人

続いてラブラブ(相思相愛)な人達を探してみます。

match(f)-[:love]->(t)-[:love]->(f) return f,t;

20170925_neo4j_02



このクエリーがこんなに簡潔に書けるのが素晴らしい! SQLではなかなか面倒なクエリーですよね。
そして、意味も分かりやすいです。f loves t loves f と言う表現は非常に単純明快です。
で、アムロは主人公だから色々あるとして、ミライさんってば…



・好きな人から友達扱いされている人

上記をちょっと修正すると非常に残念な、好きな人から友達扱いされている人になります。

match(f)-[:love]->(t)-[:friend]->(f) return f,t;

20170925_neo4j_03



ハヤトか。。。まぁ、最終的には結婚したからこれはセーフでしょう。



・愛する人に殺された人

では、続いて愛する人に殺された人はと言うと。。。

match(f)-[:love]->(t)-[:kill]->(f) return f,t;

20170925_neo4j_04



アムロ…。まさに鬼畜の所業(笑
ドラマチックではありますが、こんなことしたら立ち直れない…。



・片思いの人

続いて、残念ながら片思いの人を探してみます。

match(f)-[:love]->(t) where not((t)-[:love]->(f)) return f,t;

20170925_neo4j_05



出来た! 面白い。否定表現が使えると検索の幅が広がります。


ここまででなんとなく感じるのは、このDBは物や人の関係性を調べるのに非常に適している事が判ります。



続いてもう少し関係を調べる感じのクエリーを考えてみます。


・アムロがもう少し頑張っていれば助けられた人達

match(f:Person {name:"アムロ・レイ"})-[:kill*2]->(t) return t;

20170925_neo4j_06



アムロが殺した人が殺した人達です。こういうのSQLだと面倒。
もう少しアムロが素早く行動していれば…マチルダさんも助かったのね。


・アムロとミライさんの関係

ちょっと変わったところでアムロとミライさんの関係等を見てみましょうか。

match (f:Person {name:"アムロ・レイ"}), (t:Person{name: "ミライ・ヤシマ"}), p=allShortestPaths((f)-[*]->(t)) RETURN f, t, p;

20170925_neo4j_07



ん~。。。恋人の仇を打ってあげた関係が一番直接的と言う事ですかね。まぁ、感謝はされてそうですが
あまり盛り上がる訳にはいかない関係かも。


如何でしょうか。Neo4jは確かになんでもできる感じはしませんが、何かができる感じがします。
特に最後のアムロとミライさんの関係なんかは、なかなか面白いクエリーです。汎用的ではないですが、
特定用途に明らかに強そうなDBMS。何でもかんでもRDBMSとSQLで仕事をするのではなく、
時にはやりたい事に合わせて道具を持ち帰るのもありなのではないでしょうか。








で、今回ネタにしたのでガンダムについて色々思い出してしまいました(笑
う~ん、懐かしいですね。しかし、登場人物が多過ぎて正直知らない人がいっぱいて結構難しい
アニメだったんだな…と。
さて、次回も…Neo4jでもう少し遊んでみるかもしれません。










« Neo4jを試してみる(データの追加削除・検索 等) <ガンダム> | トップページ | Neo4jを.NET(C#)から操作する »

データサイエンティスト・データ分析」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1680410/71858217

この記事へのトラックバック一覧です: Neo4jで色々クエリを書いてみる<ガンダム>:

« Neo4jを試してみる(データの追加削除・検索 等) <ガンダム> | トップページ | Neo4jを.NET(C#)から操作する »