查询所有点间的直接路径关系

使用match p=(a)-[*]-(b) return p查询时会返回所有点之间的所有路径关系,如图,以ciAttr1点为例,在neo4j中返回这种图的路径只会有ciAttrGrp1->ciAttr1这种直接的关系,但是在NebulaGraph 会返回ciAttrGrp1->ciAttr1、ciModel1->ciAttrGrp1->ciAttr1、ciAttr2->ciAttrGrp1->ciAttr1等这些间接关系也会返回,我现在只想要这些直接关系 我该怎么写查询语句呢?附件是查询到的所有路径
result.csv (77.5 KB)

图片

你想返回以 ciAttr1 为终点、ciAttrGrp1 为起点的一跳路径?其他的多跳间接路径不返回是么?

是的 ,想要的是 只返回之间路径,然后那个路径关系图片能正确展示;另外并不限定死ciAttr1和ciAttrGrp1哈,这只是拿这两个举例子

那你用 find path FIND PATH - NebulaGraph Database 手册 或者是用 MATCH ()<-[e]-() RETURN e 这个命令只返回边呢?

FIND PATH这个看的必须知道开始点和结束点,实际使用中 我并不知道开始点结束点 就是想查出所有有路径关系的开始点和结束的点信息以及路径信息

捞取图中所有的 1 条关系,无差别地进行返回是么?

就是只想要图中的直接关系,然后再你们的客户端工具里还能正确的渲染出这个图

@MuYi 看看这个需求呢?

这里我说下我们可视化的渲染原则,我们画布是默认显示最多 1000 个点,因为多了之后信息就会缺失,没有啥展示必要了。

最多展示1000个点这没事,有这画布也只是为了能直观的看下返回的结果是不是对的

有啥办法可以实现吗?

:thinking: 你这个需求涉及到全盘捞取数据,你等等看我们的大佬咋回复吧。

O(∩_∩)O好的

  1. 在 neo4j 和 nebula 里,行为应该是一致的,match p=(a)-[*]-(b) return p 都是返回多跳路径

  2. 如果你只想要一跳(直接)路径,可以用 match p = (a)-(b)即可,或者 match p =(a)--(b) 也一样

好的,刚刚又重新试了下neo4j里确实也是和你们这个一样的。但是我在neo4j里match p=(CiAttrCS)--(CiModelCS) return p; 执行这个语句的话他可以返回所有节点的直接路径,见图1;但是在NebulaGraph我执行相同的语句,他就只会返回部分数据见图2。实际上正确的关系是 attr与attrgrp有边关系,attrgrp与model有关系,在neo4j中执行你说的语句他是可以吧这三个点的关系都查出来的,但是在NebulaGraph中attrGrp与model的关系就没有查询出来了
图1:


1 个赞

在NebulaGraph中应该返回的也是这样的结果

大佬 下面这个问题该怎么解决呢?

  1. 先看下非可视化呈现,而是通过表格呈现的方式,结果是否一致的。
  2. 你想要的是啥,如果你想要的是包含了attrGrp和model的关系,在你的查询语句里应该就要体现;
    从语义上来说,这里应该只返回CiAttrCS和CiModelCS的一度关系,不应该返回attrGrp和model的关系。否则就是违背查询的语义了。
    有可能是 neo4j 在可视化上做了 扩展处理(这个扩展似乎不合逻辑),也有可能是你当前用的 neo4j 的版本 bug

我这查询的是ciattr与ciModel之间的直接路径,如果有的话就应该返回直接路径,如果没有的话就返回没有;而不是 返回ciattr与attgrp的关系吧;像neo4j里他可以返回ciattr所有有关联节点的所有直接路径,这种方法我们认为可以接受;但是像你们这我查下attr与model的关系,你们只返回了attr与grp的关系这种的认为不太有好。

想了下 有点不对 match p =(a)--(b) return p这个语句应该是返回所有节点的直接路径吧;但是实际结果只返回了attr与grp的直接关系,grp与model的关系没有返回;还是说你们这有啥不同的处理逻辑?

你现在的用法是错的
在你的查询里,CiAttr 和 CiModel 是个变量,不是类型
请看下文档