本文へスキップ
BecomeCoder

Neo4jコース · 第2章 Neo4jをはじめる · レッスン9

Cypherとは ― 絵文字みたいに「形」で書くクエリ言語

ローカル実施

導入

Cypherの最大の特徴は、探したいデータの「形」をクエリの中に絵のように描くことです。この発想を理解すると、Cypherの構文が驚くほど覚えやすくなります。

説明

Cypherでは、次のような記号がグラフの見た目そのものに対応しています。

記号意味
()ノード(丸=点)
(:Label)ラベル付きのノード
-->向きのあるリレーションシップ(右向き)
<--向きのあるリレーションシップ(左向き)
-[:TYPE]->種類(TYPE)を指定したリレーションシップ
{key: value}プロパティの条件

たとえば「アリスがボブを知っている」というパターンは、次のように書きます。

(alice:Person {name: 'Alice'})-[:KNOWS]->(bob:Person {name: 'Bob'})
graph LR
    alice["(alice:Person<br/>name:'Alice')"] -- "KNOWS" --> bob["(bob:Person<br/>name:'Bob')"]

丸括弧・角括弧・矢印を組み合わせると、そのままグラフの絵になっているのが分かるはずです。この「文字で描いたパターンに一致するものデータベースの中から探す」というのがCypherの基本的な考え方です。

もう一つ重要なのは、Cypherが 宣言的(declarative) な言語だということです。「どうやって探すか(手順)」ではなく「何を探したいか(形)」を書くだけで、実際にどう効率よく探索するかはNeo4j自身が判断してくれます。SQLSELECT ... FROM ... WHERE ... も同じく宣言的な言語ですが、Cypherは「表と結合の指定」の代わりに「グラフの形の指定」を書く点が異なります。

次章から、実際にノードを作ったり探したりするCypherの基本文法を一つずつ学んでいきます。