Neo4j多关系或多路径

目录

一、双向关系

1.创建2个节点间的双向关系

2.创建多个路径的节点,双向关系

3.查询带有方向性的关系

4.查询路径上的多个关系

5.查询出a到b的最短距离 

6.查询特定长度的路径

二、将之前的关系清空下,如图所示,在操作一次

 1.查询出a到b的最短距离 

​编辑 2.查询路径上的多个关系

3.查询特定长度的路径


 

一、双向关系

1.创建2个节点间的双向关系

CREATE (a:Person {name: 'Alice'})-[r1:KNOWS]->(b:Person {name: 'Bob'})
CREATE (b)-[r2:KNOWS_BACK]->(a)
return r1,r2

2.创建多个路径的节点,双向关系

CREATE (a:xiyou {name: '唐僧'})-[r1:师父]->(b:xiyou {name: '孙悟空'})
CREATE (c:xiyou {name: '猪八戒'})-[r2:老家]->(d:xiyou {name: '高老庄'})
CREATE (e:xiyou {name: '老高'})-[r3:老爸]->(f:xiyou {name: '高圆圆'})
CREATE (b)-[r4:徒弟]->(a)
CREATE (a)-[r5:师父]->(c)
CREATE (a) <-[r6:徒弟]-(c)
CREATE (c) <-[r7:上门女婿]-(d)
CREATE (d)-[r8:出生地]->(e)
CREATE (d) <-[r9:村长]-(e)
CREATE (e) <-[r10:女儿]-(f)
return r1,r2,r3,r4,r5,r6,r7,r8,r9,r10

3.查询带有方向性的关系

查询带有方向性的关系时,你需要指定关系的方向。这可以通过在关系类型前加上 -> 或 <- 来实现

match(q:xiyou) -[r:师父]->(b:xiyou) return q,b

  • MATCH 关键字用于匹配模式。
  • (q:xiyou) -[r:师父]->(b:xiyou) 匹配所有从 xiyou类型的节点 r通过 师父 关系指向 xiyou类型的节点 b 的模式。
  • return q,b; 返回匹配到的节点 q 和 b ,以及关系 r

4.查询路径上的多个关系

MATCH (a:xiyou)-[:村长*]->(b:xiyou)
WITH a, b,(a)-[:村长*]->(b) AS path
RETURN a, b, LENGTH(path) AS distance;

  • 在 WITH 子句中,你需要明确地计算出从 a 到 b 的路径(即 (a)-[:村长*]->(b))。
  • LENGTH(path) 现在作用于 path,计算的是该路径中的关系数。

解释:

  • (a)-[:村长*]->(b) 是路径表达式,表示从 a 到 b 的路径,可以有多个 村长 关系。
  • LENGTH(path) 计算路径中的关系数量,作为节点之间的“距离”

 

LENGTH 应该作用于一个路径,而不是节点和关系的组合。你可以使用 MATCH 查找路径并在 RETURN 中计算该路径的长度。

换成如下写法:

MATCH (a:xiyou)-[:村长*]->(b:xiyou)

WITH a, b, relationships((a)-[:村长*]->(b)) AS path

RETURN a, b, LENGTH(path) AS distance

解释:

  1. 路径表示:使用 relationships() 来获取从节点 a 到 b 的所有关系,这样就能确保你得到了一个路径(path)。
  2. 计算路径长度LENGTH(path) 计算路径中的关系数量,也就是节点之间的“距离”。
  3. WITH 子句:中间步骤使用 WITH 来传递变量 ab 和路径 path,并计算出路径的长度 distance

但是报错,这里不适合用relationships()

如果不考虑所有的路径,而是想要获取最短路径的距离,你可以使用 shortestPath()

5.查询出a到b的最短距离 

MATCH (a:xiyou)-[:村长*]->(b:xiyou)
with shortestpath((a)-[:村长*]->(b)) AS path
RETURN LENGTH(path) AS distance;

6.查询特定长度的路径

MATCH p = (a:xiyou)-[:村长*1..3]->(b:xiyou)
WHERE a.name = '老高'
RETURN p, LENGTH(p) AS length;

  • [:村长*1..3] 表示匹配长度为1到3的 KNOWS 关系链。
  • p = ... 将整个路径作为一个变量 p 返回。
  • LENGTH(p) 计算路径的长度。

 

二、将之前的关系清空下,如图所示,在操作一次

 

 1.查询出a到b的最短距离 

 2.查询路径上的多个关系

3.查询特定长度的路径

 或【1..4】

### 如何在 Neo4j 中隐藏简化过多的关系显示 当处理复杂的数据集时,在 Neo4j 浏览器中展示大量节点和关系可能会使图形变得混乱难以解读。为了改善用户体验并提高数据可视化效果,可以采取多种策略来管理和优化视图。 #### 使用 Cypher 查询过滤条件 通过精心设计的 Cypher 查询语句能够有效地控制返回的结果数量以及所呈现的信息层次。例如: - **限制路径长度**:对于涉及多步关联的情况,可以在查询中指定最大跳跃次数以限定结果范围。 ```cypher MATCH (company:Company {name:'Acme Corp'})<-[:SUPPLIES*1..3]-(supplier) RETURN DISTINCT supplier.name AS SupplierName ``` 此查询仅考虑最多三跳内的供应商关系[^1]。 - **应用属性筛选**:利用节点边上的特定字段作为过滤依据,从而排除不感兴趣的部分。 ```cypher MATCH ()-[r:SUPPLIES]->() WHERE r.amount > 100 AND type(r)='SUPPLIES' RETURN startNode(r), endNode(r) ``` 这里只选择了供应量大于一百单位的商品交易记录。 #### 调整浏览器设置 除了修改查询逻辑外,还可以调整 Neo4j Browser 的配置选项来改变默认行为: - 设置 `neo4j.browser.default_style` 参数为 `"simple"` 者自定义样式表文件路径,以便采用更简洁的表现形式; - 修改 `neo4j.browser.display_limit` 来设定每次加载的最大实体数目,默认情况下该值设为200;如果希望进一步降低密度,则应适当减小这个数值。 这些操作可以帮助减轻初次渲染时的压力,并让用户更容易聚焦于核心结构之上。 #### 应用高级功能插件 某些第三方工具者官方提供的附加组件也具备增强型图表管理能力,比如 APOC 库就包含了用于聚合相似项、折叠重复连接等功能的方法集合。借助此类资源往往能实现更加精细的画面整理工作。 综上所述,针对 Neo4j 图形界面中存在的信息过载现象,既可以从源码层面入手精炼输出内容,也可以依靠前端参数调节达成目的。合理运用上述手段将有助于构建清晰易懂的数据模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值