1.Neo4j的Cypher语言是专门用于处理图形数据的。
使用模式来描述图形数据
熟悉SQL类的子句
说明性的,描述要找的东西,而不是如何找到它
2.
我们使用Cypher生成一个小的社交图。
CREATE(ee:Person {name:“Emil”,来自:“Sweden”,klout:99})
CREATE子句创建数据
()括号来表示节点
ee:为新节点添加一个变量“ee”并标注“Person”
{}括号来为节点添加属性
3.
现在找到代表Emil的节点:
MATCH(ee:Person)WHERE ee.name =“Emil”RETURN ee;
MATCH子句来指定节点和关系的模式
(ee:Person)具有标签“Person”的单个节点模式,其将匹配变量“ee”
WHERE子句来限制结果
ee.name =“Emil”将名称属性与值“Emil”进行比较
用于请求特定结果的RETURN子句
4.
CREATEclauses可以一次创建许多节点和关系。
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)
5.
例如,一个模式可以用来找到埃米尔的朋友:
MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee, friends
MATCH条款描述从已知节点到发现节点的模式
(ee)用Person启动模式(由WHERE限定)
- [:KNOWS] - 匹配“KNOWS”关系(在任一方向)
(朋友)将被绑定到埃米尔的朋友
6.
模式匹配可以用来提出建议。 约翰正在学习冲浪,所以他可能想找一个已经做的新朋友:
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
()空括号忽略这些节点
DISTINCT,因为多于一个路径将匹配模式
冲浪者将包含阿利森,一个朋友的朋友谁冲浪
7.通过预先提交EXPLAIN或PROFILE来了解您的查询是如何工作的:
PROFILE MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
8.在您键入时,查询编辑器会通知您有关不推荐使用的功能和潜在的昂贵查询。