请教各位大佬nebula复合查询

  • 使用问题描述
    假设现在图空间中存在一条简单的路径:person1–>person2–>person3(–>这里表示两个点之间的有向边),点的属性为name,age; 边的属性为 likeness(int),现在我想要查询从点person1出发的路径,同时满足约束,后面边上的属性likeness的值要大于前面边上的属性likeness的值(例如设person1–>person2的边上likeness属性为likeness1,person2–>person3的边上likeness属性为likeness2,则需要满足约束likeness2>likeness1),如果存在这样的路径则找出来。
    可能是不太熟悉nebula,我写了半天也写不出来,各位大佬,这个用Nebula可以实现吗?

这个内容是属于使用问题,需求一般是放置不支持的功能或者优化功能的。我改了你的分类。

然后建议你贴一下你尝试,写过的一些语句,好让回复的人更好地回复问题

我的尝试是,从person1出发找出所有的边,会返回一个边列表(本例中包含三个边元素,索引分别为0,1,2),然后通过索引去找对应的边的likeness属性作差,如果结果>0则满足要求。
match (v:person{name:person1}) -[e:follow*3]-> () where e[1].likeness-e[0].likeness>0 and e[2].likeness-e[1].likeness>0 return e;
我这样也能实现我的需求,可是当路径很长的时候,我不可能一个一个这样去写。

1 个赞

roger that

这样写可以哦,没其他更好的方式

大佬,nGQL似乎是不支持使用with传递上一个match的查询结果给下一个match查询,例如:
match(v:person{name:"Jimy"}) -->(m) with m order by m.name desc limit1 match (m) -->(o) return o.name;
会报
Error(-12) Semantic Error

那么,Nebula Graph有没有其他方法(比如使用go fetch 等查询语句)能够实现这种查询的?
例如Neo4j Cypher的
match(n{name:"Jimy})--(m) with m order by m.name desc limi1 match(m)-->(o) return o.name;

match(n:person{name:"Jimy"})--(m) return id(m) as id, m.name as name order by name desc limit 1 | go from $-.id over * yield $$.person.name;

这个写法要在person上建立索引。

match(n:player)--(m) where id(n)=="Jimy" return id(m) as id, m.name as name order by name desc limit 1 | go from $-.id over * yield $$.player.name;

指定id的话不需要索引

1 个赞

match和go可以混合使用呀,我看文档说是不能混合使用。

浙ICP备20010487号