当路径中的节点重复出现时,我们说路径中存在环路成分。路径中的环路成分在很多情况下对于连接路径的起点和终点并无大的贡献,因而被刻意忽略,嬴图GQL中就专门提供了参数no_circle()来剔除含有环路成分的路径。
从另一方面看,环路还是商业场景中非常具有代表性的一类实体间的关系模式,比较有实际意义的环路场景包括循环担保、团伙洗钱、虚假刷单等,这些行为都可以通过环路查询来进行识别与挖掘。
针对环路的特征——路径中的节点重复出现——可以通过别名的定义和引用将一条路径描述为含有环路成分的路径。例如,找出6步以内的银行卡转账环路,可以在嬴图GQL的模板查询语句中将重复出现的节点在第一次出现时进行别名定义,在其再次出现时引用该别名,从而表达出“节点重复了”:
![](https://img.ultipa.cn/2022-03-21-14-23-25-circular-path.png)
通过别名调用实现的模板环路查询
上面的嬴图GQL示例已经表述的很清晰了:节点首次在路径中出现时被定义为别名origin,经过不超过6步边以后再次出现时则调用别名origin进行过滤。
一个嬴图GQL语句在运行过程中产生的数据都是通过别名定义再引用的方式传递给后续语句的,这里说的别名是指“自定义别名”,和上一节中提到的在模板中用于的系统别名 prev_n和prev_e不同,前者几乎可以在嬴图GQL语句中的任何地方进行定义,后者只用在模板查询中。