Star

关于子图查询

有这样一个需求,space X里面包含A->B->C->D->E这样一个图, space Y里面包含A->B->C这样一个图,space Y里面A, B, C对应点的VID和space X里面对应的点A, B, C的name属性值一样,但是VID是不同的,并且事先不知道space X所存的数据。
问:查询space Y里面的图A->B->C是否存在space A里面?
请问nebula大佬这个目前nebula的子图模式支持这种吗?

没有直接支持,需要你查询出space y的子图,然后根据space y的结果去space a查询,然后比较两个子图

比如space Y的查询结果A->B->C, 根据这个结果如何去space A做查询,如何去比较呢?有参考的样例吗?

用A的vid在b里面做属性查询,然后在做子图查询

我重新描述下我的问题。
space Y里面有个图数据,比如是A->B->C。space X也存的是图数据,具体啥数据是未知的。我的需求是查询space Y的图数据是否在space X中存在,有没有可能通过子图查询的方式来去实现这个需求或者其他方式来实现图数据的查询,可能涉及多个点和边的查询。

如果你知道属性值的话,可以考虑用两个match将数据查询出来,将子图问题转换为路径问题:

  1. 根据属性查询X中的路径x
USE spaceX;
Match x = (A:tag{name:""}-[]-(B)-[]-(C) Return x
  1. 根据属性查询Y中的路径y
USE spaceY;
Match y = (A:tag{name:""}-[]-(B)-[]-(C) Return y
  1. 计算交集
1赞

这种性能应该比较差吧,不知道大佬们有没有更加高效的方法?

nebula的子图查询有计划做的更完善一点吗?类似于关系数据库的exists,真正体现子图的包含关系查询。比如我查询一段时间内的所有图数据A,然后有另外一个图数据B,查询B是否存在于A中,或者A包含B,直接通过语句查询,这种查询在实际情况有很多,要求查询也很快。如果转化为路径查询,性能会比较差。

你这个场景中,两个图不在一个图空间,图之间的唯一性id不一致我觉得是没法比较的啊,光比较属性的话我觉得也不太对吧

为什么会觉得不对呢?不对的理由是什么呢?我们的场景,两个space,space A存的是基础图数据,space B存的是领域知识图数据,领域知识图数据是基础图数据的一部分,但是他们的点的ID是不一样的,点的邻居是一样的,也就是说除了点ID不一样外,其余的都一样,相同tag的属性是一样的。只能根据属性相比较。例如,space A的图是x-y-z, space B的图是x-y, 除了他们点的ID不一样外,属性都是一样的, 如何查询与判断space B中的x-y存在于space A中?

nebula的大佬能更新下上面那个问题吗?

稍等,我去让研发回复下

感觉你可以在外面 加一个函数,比较两个图空间中返回的结果是否是包含关系啊,

浙ICP备20010487号