能否通过tigergraph,直接计算多个号码的共同联系人呢?

如:计算两个号码之间的联系人,我是这样写的。

create query com_contact(vertex<phone> p1, vertex<phone> p2) for graph mygraph{
    setaccum<vertex> @@v, @@v1, @@v2;
    start1 = {p1};
    start2 = {p2};
    result1 = select dst from start1:s-(contact:c)-phone:dst accum @@v1 += dst;
    result2 = select dst from start2:s-(contact:c)-phone:dst accum @@v1 += dst;
    @@v = @@v1 intersect @@v2;
    print @@v;
}

如果是多个号码的联系人该怎么实现呢,有什么方便的语法。

如neo4j可以,这样写。
match (a:phone)-[:contact]-(b:phone)-[:contact]-(c:phone);
return b

^_^ 不过,neo4j,2个以上号码的共同联系人,我也不知道有什么更好的办法了。

我觉得你可以参考这个代码(没测试过,只供参考哈;这个版本不记录具体的号码,只找共同联系人):

create query com_contact(Set<vertex<phone>> phones) for graph mygraph{
    SumAccum<INT> @count;
    start = {phones};
    start =
      SELECT s
      FROM    start:s-(contact_phone:e)-contact:t
      ACCUM t.@count += 1
      HAVING t.@count >= 2
    ;
    PRINT start;
}

我这边默认的schema是这样的:
顶点为phone和contact,然后有边contact_phone连接phone和contact。

我GET到你的点了,tigergraph 累加器的设计,真的很强大。不过,回复的语句有点问题,我修改了下。

create query com_contact(Set<vertex<phone>> phones) for graph mygraph{
    SumAccum<INT> @count;
    start = {phones};
    start =
      SELECT t //修改了一下这里
      FROM    start:s-(contact_phone:e)-contact:t
      ACCUM t.@count += 1
      HAVING t.@count >= 2
    ;
    PRINT start;
}

正在学习,了解tigergraph中。再次表示感谢。

1赞

完全正确,感谢您的支持~~