一、Neo4j Cypher语言的创建是为了便于对图数据进行处理:
1.用模式匹配来描述图数据
2.熟悉SQL的条款(或者应该翻译为与SQL条款相近)
3.说明、描述查找什么,而不是怎么去寻找
二、让我们用Cypher来创建一个简单的社交图节点:
CREATE (ee:Person {name:"Emil",from:"Sweden",klout:99}) ;
注:
1.Create用于创建数据
2.()用于标明一个节点
3.ee:Person 标明此节点的变量名为ee,标签为Person
4.{} 用于给节点添加属性(数据)
三、现在找到这个代表Emil的节点:
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;
注:
1.MATCH用于指定(列举)节点和关系数据
2.(ee:Person) 用于限定匹配内容的标签为Person,若有符合条件的节点则赋值给变量ee
3.WHERE 用于添加查找限制条件
4.ee.name = "Emil" 查找name属性为"Emil"的数据
5.RRTURN返回查找结果
四、Create可以同时创建多个节点和关系数据:
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)
五、举例说明,可以通过以下方法找到Emil的朋友:
MATCH (ee:Person)-[:KNOWS]-(friends)
WHERE ee.name = "Emil" RETURN ee,friends
注:
1.Match用于描述从一个已知节点查找其他节点的模式匹配
2.(ee)从Person标签开始的模式匹配(通过WHERE进行限制)
3.-[:KNOWS]-符合“KNOWS”关系的节点(从另一个方向)
4.(friends)用于存储查找到的Emil的朋友
六、模式匹配可以用于制作推荐。如Johan正在学习冲浪,所以他获取需要找一个已经会冲浪的新朋友:
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer
注:
1.()空括号用于忽略那些节点(个人感觉是不加任何限制的意思)
2.DISTINCT 因为可能会有不止一条路径符合此模式匹配,用于返回唯一值(通俗的说去重···)
3.surfer用于存储查找到的结果(将会包含Allison,一个朋友的会冲浪的朋友)
七、可以通过添加EXPLAIN
或PROFILE来了解查询的进行过程:
PROFILE MATCH (js:Person)-[:KONWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer