導入
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自身が判断してくれます。SQLの SELECT ... FROM ... WHERE ... も同じく宣言的な言語ですが、Cypherは「表と結合の指定」の代わりに「グラフの形の指定」を書く点が異なります。
次章から、実際にノードを作ったり探したりするCypherの基本文法を一つずつ学んでいきます。