文章目录

    • 一、Cypher基本语法
      • 1.创建节点和关系
      • 2.查询节点和关系
      • 3.更新节点和关系
      • 4.删除节点和关系
    • 二、小示例
      • 2.1 准备数据和创建实体和关系
      • 2.2 进行查询修改等操作

一、Cypher基本语法

Neo4j是一种基于图形结构的NoSQL数据库,它采用了Cypher查询语言来查询和操作图形数据。下面是Neo4j中语法知识的详细总结和示例:

1.创建节点和关系

在Neo4j中,可以使用CREATE语句来创建节点和关系。下面是创建一个节点的示例:

CREATE (n:Person {name: 'John', age: 30})

这将创建一个标签为Person、属性为name和age的节点。

下面是创建一个关系的示例:

MATCH (a:Person {name: 'John'}), (b:Person {name: 'Jane'})CREATE (a)-[:FRIENDS]->(b)

这将创建一个FROM节点a到TO节点b的FRIENDS关系。

2.查询节点和关系

在Neo4j中,可以使用MATCH语句来查询节点和关系。下面是查询所有节点的示例:

MATCH (n)RETURN n

这将返回所有节点。

下面是查询两个节点之间关系的示例:

MATCH (a:Person {name: 'John'})-[r:FRIENDS]->(b:Person {name: 'Jane'})RETURN r

这将返回FROM节点a到TO节点b的FRIENDS关系r。

3.更新节点和关系

在Neo4j中,可以使用SET语句来更新节点和关系的属性。下面是更新节点属性的示例:

MATCH (n:Person {name: 'John'})SET n.age = 35

这将将节点n的age属性更新为35。

下面是更新关系属性的示例:

MATCH (a:Person {name: 'John'})-[r:FRIENDS]->(b:Person {name: 'Jane'})SET r.since = '2022-01-01'

这将将FRIENDS关系r的since属性更新为2022年1月1日。

4.删除节点和关系

在Neo4j中,可以使用DELETE语句来删除节点和关系。下面是删除节点的示例:

MATCH (n:Person {name: 'John'})DELETE n

这将删除所有名为John的Person节点。

下面是删除关系的示例:

MATCH (a:Person {name: 'John'})-[r:FRIENDS]->(b:Person {name: 'Jane'})DELETE r

这将删除FROM节点a到TO节点b的所有FRIENDS关系。

二、小示例

使用Neo4j创建一个包含10个用户和20个商品以及它们之间的购买关系的知识图谱,并进行查询、修改等操作。

2.1 准备数据和创建实体和关系

我们需要准备好数据。我将用以下的CSV文件作为示例数据:

注意下面所有的文件都要放在数据库对应位置,如下图

users.csv

userID,nameuser1,John Doeuser2,Jane Doeuser3,Bob Smithuser4,Emily Jonesuser5,David Leeuser6,Samantha Brownuser7,Alice Johnsonuser8,Michael Davisuser9,Kate Johnsonuser10,Ryan Wilson

products.csv

productID,name,category,priceproduct1,iPhone,Electronics,999product2,iPad,Electronics,599product3,MacBook,Electronics,1299product4,Kindle,E-Books,89product5,Harry Potter Book,Books,10product6,Game of Thrones Book,Books,12product7,MacBook Pro,Electronics,1499product8,Samsung TV,Electronics,799product9,Sony Camera,Electronics,599product10,Canon Printer,Electronics,199product11,Lenovo Laptop,Electronics,799product12,Microsoft Surface,Electronics,999product13,Fitbit Watch,Wearable,149product14,Apple Watch,Wearable,399product15,Sony Headphones,Electronics,299product16,Samsung Monitor,Electronics,199product17,Nintendo Switch,Electronics,299product18,Playstation 5,Electronics,499product19,Xbox Series X,Electronics,499product20,Bose Speakers,Electronics,349

其中,每个用户具有userIDname两个属性,每个商品具有productIDnamecategoryprice四个属性。

现在,我们将使用Neo4j的Cypher语言来创建这个知识图谱。首先,我们需要使用LOAD CSV命令将数据加载到Neo4j中。

LOAD CSV WITH HEADERS FROM "file:///users.csv" AS rowCREATE (:User {userID: row.userID, name: row.name})phpCopy codeLOAD CSV WITH HEADERS FROM "file:///products.csv" AS rowCREATE (:Product {productID: row.productID, name: row.name, category: row.category, price: toFloat(row.price)})

接下来,我们将创建40条购买关系。我们可以使用MATCHCREATE命令来实现这一点。例如,以下命令创建了用户1购买了商品1的关系:

MATCH (u:User {userID: "user1"}), (p:Product {productID: "product1"})CREATE (u)-[:PURCHASED]->(p)

我们可以重复执行上述命令,为每个用户和商品创建购买关系。例如,以下命令创建了用户2购买了商品3的关系:

MATCH (u:User {userID: "user2"}), (p:Product {productID: "product3"})CREATE (u)-[:PURCHASED]->(p)

也可以使用CSV文件直接导入:

假设我们有一个名为 user_product.csv 的 CSV 文件,其中包含了用户和商品之间的购买关系。文件格式如下:

UserID,ProductIDuser1,product1user1,product2user1,product3user2,product1user2,product2user2,product4user3,product2user3,product3user3,product4user4,product3user4,product4user4,product5user5,product1user5,product3user6,product2user6,product3user6,product4user7,product1user7,product3user8,product2user8,product3user8,product5user9,product1user9,product3user9,product4user10,product2user10,product5user1,product11user1,product12user1,product13user2,product11user2,product12user2,product14user3,product12user3,product13user3,product14user4,product13user4,product14user4,product15user5,product11user5,product13user6,product20user6,product13user6,product14user7,product11user7,product13user8,product20user8,product13user8,product15user9,product10user9,product13user9,product14user10,product12user10,product15user1,product9user1,product7user1,product3user2,product19user2,product17user2,product18user3,product16user3,product15user3,product13user4,product17user4,product20user4,product10user5,product7user5,product9user6,product8user6,product10user6,product16user7,product17user7,product18user8,product20user8,product3user8,product5user9,product10user9,product9user9,product7user10,product8user10,product6

现在我们要将这些关系导入到 Neo4j 中,我们可以使用 LOAD CSV 命令来实现:

LOAD CSV WITH HEADERS FROM "file:///user_product.csv" AS rowMATCH (u:User {userID:row.userID})MATCH (p:Product {productID:row.productID})CREATE (u)-[:PURCHASED]->(p);

上述命令首先使用 LOAD CSV 加载 user_product.csv 文件,然后使用 MATCH 命令将用户和商品节点匹配,并最终使用 CREATE 命令创建购买关系。

2.2 进行查询修改等操作

  1. 查询商品

为了查询我们的商品,我们可以使用以下Cypher语句:

MATCH (p:Product)RETURN p

这将返回所有的商品节点。

  1. 查询用户

为了查询我们的用户,我们可以使用以下Cypher语句:

MATCH (u:User)RETURN u

这将返回我们所有的用户节点。

  1. 查询购买关系

为了查询我们的购买关系,我们可以使用以下Cypher语句:

MATCH p=()-[r:PURCHASED]->() RETURN p

这将返回所有的购买关系。

接下来,让我们看一下如何修改我们的知识图谱中的数据。

  1. 修改商品名称

为了修改商品的名称,我们可以使用以下Cypher语句:

MATCH (p:Product)WHERE p.productID = 'product1'SET p.name = 'New_product1'RETURN p

这将修改ID为“product1”的商品的名称,并返回修改后的节点。

删除购买关系

为了删除购买关系,我们可以使用以下Cypher语句:

MATCH (u:User)-[p:PURCHASED]->(pr:Product)WHERE u.userID = 'user1' AND pr.productID = 'product2'DELETE p

这将删除用户ID为“user1”和商品ID为“product2”的购买关系。

上面就是一个知识图谱创建的知识和示例了,期待后面更多内容。
最后欢迎关注公众号【智能建造小硕】(分享计算机编程、人工智能、智能建造、日常学习、科研和写作经验等,欢迎大家关注交流。)