neo4j
Cypher

Neo4jの勉強メモ1

More than 3 years have passed since last update.


グラフデータベースとは


  • プロパティを持つノードでデータとそのリレーションをあらわす


ノードとは


  • ノードとはデータを保持するレコードである

  • データはノードのプロパティとして格納される

  • プロパティはKV形式になっている

  • プロパティはString, Number, Boolean

  • Neo4j can store billions of nodes


ラベル


  • ノードにはラベルを付けることが出来る

  • ノードは複数のラベルを持つことが出来る

  • ラベルは一切プロパティーをもてない


リレーションシップ


  • リレーションシップはレコードがどのように紐付いているかを示す

  • リレーションシップは常に方向を持っている

  • リレーションシップはタイプを持っている

  • リレーションシップはデータのパターンである

  • リレーションシップはプロパティを持てる


Cypher


  • グラフデータを扱うためのSQL的なもの



  • CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })

    CREATE データを作るための宣言
    () ノードを示す
    ee:Person eeはデータ名称、Personはラベル名称
    {} プロパティ宣言

MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;

MATCH where句宣言みたいなもの

(ee:Person) 対象のノード

WHERE WHERE句

ee.name = "Emil" where句の左側的な

RETURN リターン


  • 一度にたくさんのデータを作ることが可能

  • MATCH (ee:Person) WHERE ee.name = "Emil"
    
    CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
    (ir:Person { name: "Ian", from: "England", title: "author" }),
    (rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
    (ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
    (ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
    (js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
    (ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
    (rvb)-[:KNOWS]->(ally)

  • リレーションから検索する



  • MATCH (ee:Person)-[:KNOWS]-(friends)
    
    WHERE ee.name = "Emil" RETURN ee, friends

    -[:KNOWS] リレーションシップがKNOWであるかどうか

    (friends) エミリーの友達に限定することを指定



  • グラフデータの得意な検索



  • MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
    
    WHERE js.name = "Johan" AND surfer.hobby = "surfing"
    RETURN DISTINCT surfer

    () 空の丸カッコはsqlでいうところの*

    DISTINCT sqlでいうところのdistinctと同じ。ヒットするノードへのパスが複数あるときに役立つ。




参考URL

http://neo4j.com/docs/2.1.6/cypher-query-lang.html