tugraph-db icon indicating copy to clipboard operation
tugraph-db copied to clipboard

match子句的模式图中包含无向环的情况

Open seijiang opened this issue 1 year ago • 1 comments

问题描述

子图为TuGraph提供的MovieDemo, Cypher为"match p=(n1)-[r1]->(m:movie)<-[r2]-(n2),(n1)-[r3]->(n2) return n1.login,n2.login", 根据MovieDemo的Schema,n1和n2都只可能是user类型,所以n1.login和n2.login都不应该是"null",但是从结果看不是这样,再次测试发现很多n1,n2都是person类型,这说明(n1)-[r3]->(n2)的限制并没有被应用,从执行计划上看也是这样。

Produce Results 
    Project [n1.login,n2.login] 
        Expand(All) [m <-- n2 ] 
            Expand(All) [n1 --> m ] 
                All Node Scan [n1]

根据源码看,cypher::PatternGraph::_CollectExpandStepsByDFS的提取最大连通子图的方式本来就不支持环,对于这个cypher,它会先将{n1,r1,m}这个三元组加入,然后将{m,r2,n2}这个三元组加入,然后n1,m,n2这三个点都被访问过那么就不会加入新的三元组,所以就不会处理环。

处理意见

对于cypher::PatternGraph::_CollectExpandStepsByDFS这个函数,每次加入新的三元组的时候不应该判断邻点有没有被访问?应该判断边有没有被访问?毕竟三元组事实上是和一条边一一对应的

seijiang avatar Jun 15 '23 03:06 seijiang

确实存在这个问题,调整的方法我觉得应该同时判断pattern边和点有没有被访问,如果边未访问则需要添加一个expand算子,根据对面的点有没有被访问决定是expand all还是expand into操作

wangtao9 avatar Jul 04 '23 06:07 wangtao9