Graph 快速入门
Graph 快速入门
Redis 堆栈 |
---|
先决条件
对于此快速入门教程,您需要:
-
启用了 RedisGraph 模块的 Redis 数据库。您可以使用以下任一方法:
-
Redis Cloud 数据库
-
-
redis-cli
命令行工具 -
redis-py
客户端库 v4.1.0 或更高版本
图表redis-cli
首先,使用redis-cli
.
创建图表
创建图表时,您可以使用以下格式定义节点及其之间的关系:
(:<node 1>)-[:<relationship>]->(:<node 2>)
要在单个创建查询中定义多个节点和关系,请用逗号分隔条目。
例如,使用CREATE
query 创建参加 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"
Add nodes
You can add new nodes to a previously created 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"
Add relationships
To create new relationships between nodes of a 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"
Query the graph
After you create a graph, you can use the GRAPH.QUERY
command to query the graph's data.
The following example returns which motorcycle riders compete for team 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"
You can also use functions to create more complex queries.
For example, you can use the count
function to check how many riders represent team 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 nodes
You can use the DELETE
query to remove a specific node and its relationships from the 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 relationships
You can also use the DELETE
query to delete a node's relationships without removing any nodes:
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"
Delete a graph
To delete an entire graph, including all nodes and relationships, run the GRAPH.DELETE
command:
127.0.0.1:12543> GRAPH.DELETE MotoGP
"Graph removed, internal execution time: 0.013138 milliseconds"
Graph with Python
If you want to use graphs within an application, you can use one of these client libraries.
The following example uses the Redis Python client library redis-py, which supports graph commands as of v4.1.0.
This Python code creates a graph that represents friendships between users on a social media website. It also shows how to run queries and change relationships between users.
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()
Example output:
$ ./quick_start.py
Alex's original friend count: [[2]]
Alex's updated friend count: [[1]]
Visualize graphs with Redis Insight
You can use the Redis Insight workbench to visualize the relationships between the nodes of your graph.
-
Connect to your database with Redis Insight. You can connect manually or use the auto-discovery feature.
-
Select the Workbench button:
-
Enter a graph query in the text editor.
For example, this query returns all nodes and relationships in the graph:
GRAPH.QUERY MotoGP "MATCH (n) RETURN n"
-
Select Run:
After you run a query, the output log displays a visual representation of your graph's nodes and relationships:
More info
On this page