Graph 快速入门
Graph 快速入门
前提条件
对于本快速入门教程,您需要
-
启用 RedisGraph 模块的 Redis 数据库。您可以使用以下任一选项
-
Redis Cloud 数据库
-
-
redis-cli
命令行工具 -
redis-py
客户端库 v4.1.0 或更高版本
使用 redis-cli
处理 Graph
首先,使用 redis-cli
连接到您的数据库。
创建 Graph
创建 Graph 时,您可以使用以下格式定义节点及其关系
(:<节点 1>)-[:<关系>]->(:<节点 2>)
要在单个创建查询中定义多个节点和关系,请使用逗号分隔条目。
例如,使用 CREATE
查询来创建一个新的 Graph,其中包含参加 MotoGP 联赛的摩托车手和车队
127.0.0.1:12543> GRAPH.QUERY MotoGP "CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'}), (:Rider {name:'Dani Pedrosa'})-[:rides]->(:Team {name:'Honda'}), (:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})"
1) 1) "Labels added: 2"
2) "Nodes created: 6"
3) "Properties set: 6"
4) "Relationships created: 3"
5) "Cached execution: 0"
6) "Query internal execution time: 0.385472 milliseconds"
添加节点
您可以将新节点添加到先前创建的 Graph
127.0.0.1:12543> GRAPH.QUERY MotoGP "CREATE (:Rider {name:'Jorge Lorenzo'})"
1) 1) "Nodes created: 1"
2) "Properties set: 1"
3) "Cached execution: 0"
4) "Query internal execution time: 0.185841 milliseconds"
添加关系
要在 Graph 的节点之间创建新关系
127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider), (t:Team) WHERE r.name = 'Jorge Lorenzo' and t.name = 'Honda' CREATE (r)-[:rides]->(t)"
1) 1) "Relationships created: 1"
2) "Cached execution: 0"
3) "Query internal execution time: 0.356578 milliseconds"
查询 Graph
创建 Graph 后,您可以使用 GRAPH.QUERY
命令查询 Graph 的数据。
以下示例返回哪些摩托车手为 Yamaha 车队效力
127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r,t"
1) 1) "r"
2) "t"
2) 1) 1) 1) 1) "id"
2) "0"
2) 1) "labels"
2) 1) "Rider"
3) 1) "properties"
2) 1) 1) "name"
2) "Valentino Rossi"
2) 1) 1) "id"
2) "1"
2) 1) "labels"
2) 1) "Team"
3) 1) "properties"
2) 1) 1) "name"
2) "Yamaha"
3) 1) "Cached execution: 0"
2) "Query internal execution time: 0.500535 milliseconds"
您还可以使用 函数创建更复杂的查询。
例如,您可以使用 count
函数检查有多少车手代表 Honda 车队
127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider)-[:rides]->(t:Team {name:'Honda'}) RETURN count(r)"
1) 1) "count(r)"
2) 1) 1) "2"
3) 1) "Cached execution: 0"
2) "Query internal execution time: 0.445760 milliseconds"
删除节点
您可以使用 DELETE
查询从 Graph 中删除特定节点及其关系
127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider {name: 'Dani Pedrosa'}) DELETE r"
1) 1) "Nodes deleted: 1"
2) "Relationships deleted: 1"
3) "Cached execution: 0"
4) "Query internal execution time: 0.276815 milliseconds"
删除关系
您还可以使用 DELETE
查询删除节点的关系,而不删除任何节点
127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (:Rider {name: 'Valentino Rossi'})-[r:rides]->() DELETE r"
1) 1) "Relationships deleted: 1"
2) "Cached execution: 0"
3) "Query internal execution time: 0.348346 milliseconds"
删除 Graph
要删除整个 Graph,包括所有节点和关系,请运行 GRAPH.DELETE
命令
127.0.0.1:12543> GRAPH.DELETE MotoGP
"Graph removed, internal execution time: 0.013138 milliseconds"
使用 Python 处理 Graph
如果要在应用程序中使用 Graph,可以使用以下 客户端库之一。
以下示例使用 Redis Python 客户端库 redis-py,该库自 v4.1.0 起支持 Graph 命令。
这段 Python 代码创建了一个 Graph,表示社交媒体网站上用户之间的友谊。它还展示了如何运行查询和更改用户之间的关系。
import redis
from redis.commands.graph.edge import Edge
from redis.commands.graph.node import Node
# Connect to a database
r = redis.Redis(host="<endpoint>", port="<port>",
password="<password>")
# Create nodes that represent users
users = { "Alex": Node(label="Person", properties={"name": "Alex", "age": 35}),
"Jun": Node(label="Person", properties={"name": "Jun", "age": 33}),
"Taylor": Node(label="Person", properties={"name": "Taylor", "age": 28}),
"Noor": Node(label="Person", properties={"name": "Noor", "age": 41}) }
# Define a graph called SocialMedia
social_graph = r.graph("SocialMedia")
# Add users to the graph as nodes
for key in users.keys():
social_graph.add_node(users[key])
# Add relationships between user nodes
social_graph.add_edge( Edge(users["Alex"], "friends", users["Jun"]) )
# Make the relationship bidirectional
social_graph.add_edge( Edge(users["Jun"], "friends", users["Alex"]) )
social_graph.add_edge( Edge(users["Jun"], "friends", users["Taylor"]) )
social_graph.add_edge( Edge(users["Taylor"], "friends", users["Jun"]) )
social_graph.add_edge( Edge(users["Jun"], "friends", users["Noor"]) )
social_graph.add_edge( Edge(users["Noor"], "friends", users["Jun"]) )
social_graph.add_edge( Edge(users["Alex"], "friends", users["Noor"]) )
social_graph.add_edge( Edge(users["Noor"], "friends", users["Alex"]) )
# Create the graph in the database
social_graph.commit()
# Query the graph to find out how many friends Alex has
result1 = social_graph.query("MATCH (p1:Person {name: 'Alex'})-[:friends]->(p2:Person) RETURN count(p2)")
print("Alex's original friend count:", result1.result_set)
# Delete a relationship without deleting any user nodes
social_graph.query("MATCH (:Person {name: 'Alex'})<-[f:friends]->(:Person {name: 'Jun'}) DELETE f")
# Query the graph again to see Alex's updated friend count
result2 = social_graph.query("MATCH (p1:Person {name: 'Alex'})-[:friends]->(p2:Person) RETURN count(p2)")
print("Alex's updated friend count:", result2.result_set)
# Delete the entire graph
social_graph.delete()
示例输出
$ ./quick_start.py
Alex's original friend count: [[2]]
Alex's updated friend count: [[1]]
使用 Redis Insight 可视化 Graph
您可以使用 Redis Insight 工作台来可视化 Graph 节点之间的关系。
-
选择 工作台 按钮
-
在文本编辑器中输入 Graph 查询。
例如,此查询返回 Graph 中的所有节点和关系
GRAPH.QUERY MotoGP "MATCH (n) RETURN n"
-
选择 运行
运行查询后,输出日志会显示 Graph 的节点和关系的可视化表示
