这是一个非常棒的问题!Neo4j 是目前最主流的图数据库(Graph Database),学习它对于处理社交网络、金融风控、知识图谱等关系密集型数据非常有价值。
以下是一份从零开始的 Neo4j 入门学习路线,分为五个阶段,帮你高效上手。
在学习具体语法前,先搞清楚 Neo4j 解决的是什么问题。
JOIN 操作,数据量大时性能骤降。推荐新手使用 Neo4j Desktop(最简单)或 Neo4j Aura(云端免费版)。
如果你熟悉 Docker,一行命令搞定:
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/password neo4j:latest
然后在浏览器访问 http://localhost:7474。
Cypher 是 Neo4j 的专用语言,类似于 SQL 之于 MySQL。它非常直观,像画箭头一样写代码。
// 创建一个节点
CREATE (p:Person {name: '张三', age: 30}) RETURN p;
// 创建关系
MATCH (a:Person {name: '张三'}), (b:Person {name: '李四'})
CREATE (a)-[r:FRIENDS]->(b) RETURN r;
// 查询所有 Person
MATCH (n:Person) RETURN n;
// 查询张三的朋友
MATCH (a:Person {name: '张三'})-[:FRIENDS]->(friend)
RETURN friend;
MATCH (n:Person {name: '张三'}) SET n.age = 31 RETURN n;
// 删除节点及其所有关系
MATCH (n:Person {name: '张三'}) DETACH DELETE n;
MATCH path = (a:Person {name: '张三'})-[:FRIENDS*2..2]->(fof)
RETURN path;
MATCH (n:Person) WHERE n.age > 25 RETURN n;
单纯手写 CREATE 效率太低,你需要学会导入真实数据。
LOAD CSV 命令。LOAD CSV WITH HEADERS FROM 'file:///movies.csv' AS row
CREATE (m:Movie {title: row.title, year: toInteger(row.year)});
Neo4j Browser 自带了一个电影图数据库示例。打开 Neo4j Browser,输入 :play movie-graph 并回车,按照指引一步步操作。这是最好的入门教程。
学会了查询,下一步是在代码里调用它。
from neo4j import GraphDatabase
uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "password"))
def add_friend(tx, name, friend_name):
tx.run("MATCH (a:Person {name: $name}) "
"CREATE (a)-[:FRIENDS]->(friend:Person {name: $friend_name})",
name=name, friend_name=friend_name)
with driver.session() as session:
session.write_transaction(add_friend, "Alice", "Bob")
driver.close()
:play 命令,如 :play cypher。id, name)建立索引,否则查询会全盘扫描。CREATE INDEX FOR (n:Person) ON (n.name);
null 的处理方式,写查询时要小心。:play movie-graph,跟着做完。CREATE, MATCH, RETURN 语法。祝你学习顺利!如果有具体的业务场景(比如做知识图谱还是分析账本),可以告诉我,我能给你更具体的建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。