neo4j常见语句-match

以下是match的常用语法
查询节点

//检索节点 (查询 person节点下name字段为Jack Nicholson的数据 )
match(person{name:"Jack Nicholson"}) return person
//用where条件查询
match(p:Person) where p.born=1996 and p.name='Jonathan Lipnicki' return p

使用limit

//查询Person节点 返回10条数据(只返回Person的name字段)
match(p:Person) return p.name limit 10

使用order by

//根据生日降序查询,只返回前10条
match(p:Person) return p order by p.born desc limit 10

查询关系

//查找 Tom Cruise 参演了那些电影 
match(p:Person{name:'Tom Cruise'})-[:ACTED_IN]->(m:Movie) return p,m
//查看那个Person 指导了title='Sleepless in Seattle' 的电影
match(m{title:'Sleepless in Seattle'})<-[:DIRECTED]-(p) return m,p
//查询和Robin Williams共同参演过电影的人(首先匹配节点{name:'Robin Williams'}的人,匹配此节点通过[:ACTED_IN]关系指向的节点m,并且同时
匹配某个节点p2也通过[:ACTED_IN]关系指向的节点m,然后返回匹配节点m的p2对象)
match(p:Person{name:'Robin Williams'})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(p2) return p2
//查询和电影The Birdcage 有关系(所有关系)的人,并返回人名,关系名称,还有关系对象(包含关系属性等)
MATCH(p:Person)-[relatedTo]->(m:Movie {title:"The Birdcage"}) return p.name,type(relatedTo),relatedTo
//查找演员Clint Eastwood 和 演员Hugo Weaving的最短关系路径,其中 shortestPath 是一个内置方法
MATCH p = shortestPath(
    (p1:Person {name: "Clint Eastwood"})-[*]-(p2:Person {name: "Hugo Weaving"})
    ) 
RETURN p
//查询Adam 的朋友的朋友
MATCH(user:User{ name:"Adam"})-[rl:FRIEND]-()-[r2:FRIEND]-(friend_of_a_friend) 
RETURN friend_of_a_friend.name AS fofName
查询外向关系(:Person {name: "Cuba Gooding Jr."}):查找 标签为 Person 且 属性 name 为 "Cuba Gooding Jr." 的节点。
-->:表示 有向关系(从左到右),关系类型未指定(匹配任意类型)。
(movie):匹配与 Person 节点通过关系连接的 目标节点,并将其命名为 movie(变量名),并返回movie
match(:Person{name:"Cuba Gooding Jr."})-->(moive) return moive
查询关联关系(不带方向的)(:Person {name: "Cuba Gooding Jr."}):查找 标签为 Person 且 属性 name 为 "Cuba Gooding Jr." 的节点。
--:表示 无向关系(不区分方向),关系类型未指定(匹配任意类型)。
(movie):匹配与 Person 节点通过关系连接的 任意节点,并将其命名为 movie。
match(:Person{name:"Cuba Gooding Jr."})--(moive) return moive
查询某个节点其关系数量大于N的节点
//查询Person节点,其关系数量大于3的所有数据
MATCH (u:Person)
WHERE size(()-[]-(u)) > 3 
return u
### 导入 CSV 文件以构建 Neo4j 图数据库 为了通过 Cypher Shell 或命令行导入 `actors.csv`、`movies.csv` 和 `roles.csv` 文件并构建图数据库结构,可以按照以下方法操作: #### 1. 准备工作 确保所有的 CSV 文件都位于 `${NEO4J_HOME}/import` 目录下。如果需要从其他路径加载文件,则需修改 `neo4j.conf` 配置文件,注释掉 `dbms.directories.import=import` 的限制[^2]。 #### 2. 创建节点和关系 以下是具体的 Cypher 查询语句用于导入数据: ##### (a) 导入演员节点 (`actors.csv`) 假设 `actors.csv` 文件的第一列是唯一标识符 `id`,第二列为姓名 `name`: ```cypher LOAD CSV WITH HEADERS FROM 'file:///actors.csv' AS row CREATE (:Actor {id: toInteger(row.id), name: row.name}) ``` 此查询会将每一行的数据转换为一个 `Actor` 节点,并赋予其属性 `id` 和 `name`[^1]。 ##### (b) 导入电影节点 (`movies.csv`) 假设 `movies.csv` 文件的第一列是唯一标识符 `movieId`,第二列为电影名称 `title`,第三列为发行年份 `released`: ```cypher LOAD CSV WITH HEADERS FROM 'file:///movies.csv' AS row CREATE (:Movie {movieId: toInteger(row.movieId), title: row.title, released: toInteger(row.released)}) ``` 这一步创建了 `Movie` 类型的节点,并设置了相应的属性。 ##### (c) 导入角色关系 (`roles.csv`) 假设 `roles.csv` 文件包含三列:`actorId` 表示演员 ID,`movieId` 表示电影 ID,以及 `role` 列表示角色名: ```cypher LOAD CSV WITH HEADERS FROM 'file:///roles.csv' AS row MATCH (a:Actor {id: toInteger(row.actorId)}), (m:Movie {movieId: toInteger(row.movieId)}) CREATE (a)-[:ACTED_IN {role: row.role}]->(m) ``` 这段代码首先匹配对应的 `Actor` 和 `Movie` 节点,然后建立两者之间的 `ACTED_IN` 关系,并附加角色信息作为关系属性。 #### 3. 处理重复节点问题 当存在重复的节点时,可以通过参数选项忽略这些冲突。例如,在使用 `neo4j-admin import` 工具时加入 `--ignore-duplicate-nodes=true` 参数即可避免错误发生[^3]。 #### 4. 测试查询 完成上述步骤后,可通过简单的 Cypher 查询验证数据是否成功导入。比如查找特定名字开头的人及其参与过的影片: ```cypher MATCH (p:Person)-[r:ACTED_IN]->(m:Movie) WHERE p.name STARTS WITH 'K' RETURN p, r, m ``` #### 注意事项 - 如果遇到性能瓶颈或者大数据量场景下的优化需求,请考虑批量处理方式或调整 JVM 堆内存大小等高级设置。 - 对于更复杂的过滤条件可参考样例查询[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值