tiger边分类
tiger的边分为有向边,无向边。
有向边和无相边的区别是:界面上有向边有明显箭头,无向边就是直线。
注意: 有向边又有单向边,双向边。
无向边由于指定了边的起点类型和终点类型,而任何顶点的类型只能有一个,无所无向边其实还是有方向的。
只有起点和终点类型都是*的时候,才是真正的无向边。
单向边无法反向遍历。
无相边和双向边都可以反向遍历。
无向边的反向遍历结果相同。
双向边的反向遍历结果中边的类型不同。
双向边和有向边的本质差别
双向边其实无向边效果差不多。
双向边和有向边的本质差别在于查询方向。双向边可以指定两个方向查询,有向边根本不能反方向查询。
原因是tiger的查询语法范式定死了格式。
SELECT t FROM vSetVarName:s – ((eType1|eType2):e) -> (vType1|vType2):t
第一个横杠-前面必须是顶点集合(冒号后面是别名,别名可以省略)
依据这个范式,最精简的写法是:
source = SELECT s FROM source:s -()-> ;
举例说明:
source = SELECT t FROM source:s -(:e)-> :t
上面的写法无法写成(因为dest是顶点集合,不是顶点类型):
dest = SELECT t FROM :s -(:e)-> dest:t
tiger和arango边的方向性
arangodb里面的边都是有向边,但是遍历方向是可以指定的,也是支持反向遍历。
FOR vertext[] IN [] FOR v,e,p in[1..3] OUTBOUND|INBOUND|ANY startVertex [EDGES] FILTER ...
tiger的GSQL里面要实现arangodb的AQL中的设定方向的效果,最好的方式是创建边的时候就定下来这条边是单向边还双向边。如果是单向边,创建边的时候就定好了的出的还是进的,即OUTBOUND还是INBOUND的。
如果创建边的时候指定双向边,那么遍历就是ANY方式。
在tiger的query里面不能再直接指定边的方向性了。
另外,如果都是双向边,这是遍历默认相当于arangodb的ANY方向,如何指定方向呢?