1. 創(chuàng)建一個節(jié)點
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
-
CREATE創(chuàng)建數(shù)據(jù) -
()表示節(jié)點 -
ee:Person,ee是變量名,Person是label名稱 -
{}是節(jié)點屬性
2. 查找一個節(jié)點
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;

-
MATCH指定一個節(jié)點或關(guān)系的模式 -
(ee:Person)單一節(jié)點,Person為label,把值給變量ee -
WHERE來限制結(jié)果 -
ee.name = "Emil"比較 name 的值和 "Emil" -
RETURN用于返回特定的結(jié)果
3. 創(chuàng)建多個節(jié)點和關(guān)系
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)
在同一個上下文中,變量名(如ee,js)用于關(guān)系中節(jié)點的引用,其中ee是通過MATCH獲得的node,js是新創(chuàng)建的node。
CREATE (節(jié)點1), (節(jié)點2), (節(jié)點3), (節(jié)點4),
(節(jié)點1)-[關(guān)系1]->(節(jié)點2),
(節(jié)點2)-[關(guān)系2]->(節(jié)點3),
......
4. 模式匹配
模式匹配用于描述要在圖中尋找的內(nèi)容
MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee, friends

-
MATCH語句描述了已知節(jié)點到待找節(jié)點的關(guān)系模式 -
(ee)模式始于Person (由 WHERE 提供) -
-[:KNOWS]-匹配 "KNOWS" 關(guān)系 (任意方向) -
(friends)會和 Emil 的 friends 綁定
5. 推薦
模式匹配能用來推薦,Johan正在學沖浪,他想找一個會沖浪的新朋友。
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer

-
()空括號忽略這些節(jié)點 -
DISTINCT因為有多于一條的路徑符合模式 -
surfer包含了 Allison, 朋友的朋友而且會沖浪
6. 分析
如果你想了解查詢是如何進行的,可以在查詢語句之前加上EXPLAIN或PROFILE。
PROFILE MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer

Refs
本文來自 Neo4j 的 :play cypher,是cypher這款圖查詢語言的入門教程。
更多Cypher的內(nèi)容可以參考 http://neo4j.com/docs/cypher-refcard/3.0/