多跳路径写法

match p= (HuaweiBarCode:DM10002640) -[:RM10011889*0…]->(bar)

这个对应的0~N跳的写法怎么写go呢??

问题一: 你确定不指定会是一直找??

问题二: 怎么在lookup中使用in […]的功能? 或者怎么使用ngql使用in的功能(除了match, 太慢了)

是我理解错误了,默认的 n 就是 1

所以我问怎么找0-N的, 对了请教你下, 是不是match,unwind和其他的fetch, go, lookup…不能混合使用?

能不能麻烦你们大神指导下这个对于的ngql怎么写?

这条语句 nGql 做不了,where 子句还不支持 pattern,exists 也还不支持 pattern。

我接触nebula也算已经有3个月了, 很大精力放在部署和性能测试上了, 这个nGql了解的还少, 就是感觉写ngql很难上手, 像最简单的where a.id in[…] 都写不出来, match到时有, 但是太慢了,

2 个赞

这个是不是也是不行的? 必须制定最大跳数? 例如 go 5 steps from … 这是查5跳以内的(不包括0)? 那寓意其实和neo4j的()-[aa*0…]-() 还是不一样

nGql 的图描述能力比 cypher 要弱很多,所以我们也在逐步兼容 cypher,但是 cypher 相关的优化还比较少,match 确实比 go 语句慢很多,陆续在做优化了。

你上面截图中 match (part:dwr_huaweisn_part) where part.barcode in ["1","2"] return part 这条语句是可以支持的,可以查一下报错原因。
这是我本地的测试:

(czp@nebula) [nba]> match (v:player) where v.name in ["Tony Parker","Yao Ming"] return v.name
+---------------+
| v.name        |
+---------------+
| "Tony Parker" |
+---------------+
| "Yao Ming"    |
+---------------+

我的数据量太大了, 89亿, 所以报错, 你这个篮球实例太少了

是的。必须指定最大步数,可以包括 0 步,写法类似:

go 0 to 5 steps from "vid" over RM10011889 

有可能

你好,

疑问一: 那这个go 0 to 5 from … 假如我这个最大的跳数是3步, 那是不是走到3步就停了, 不会走了,这样的话, 我就可以吧5写大点

疑问二: 这些open cypher的函数 ngql都不支持么?

p130

@min.wu
wu老师啊, 这些函数支持cypher没问题, 我们用的neo4j很多用这个, 我就是想问支持nGql吗??? 我是没写出来, 你理解我的意思吗?

match + collect 是可以的。
yield + collect 我也不是很确定,还是尽量不要 原生nGQL 混合 cypher语法 使用

go from "player100" over serve 
  where serve.start_year > 1995 
  yield serve.start_year AS s 
| yield collect($-.s)

应该都是支持的,我本地测试:

(czp@nebula) [nba]> with ["123",null,"abc"] as ids return reverse(ids),tail(ids),head(ids),last(ids),coalesce([ids[1],ids[2]])
+--------------------------+-------------------+-----------+-----------+---------------------------+
| reverse(ids)             | tail(ids)         | head(ids) | last(ids) | coalesce([ids[1],ids[2]]) |
+--------------------------+-------------------+-----------+-----------+---------------------------+
| ["abc", __NULL__, "123"] | [__NULL__, "abc"] | "123"     | "abc"     | "abc"                     |
+--------------------------+-------------------+-----------+-----------+---------------------------+

coalesce 的写法好像和 cypher 不一致,我起个 issue 吧

你好
with,return 应该都是opencypher的语法吧,不能和go lookup 混用吧? 我最终是想用到ngql中

函数都是可以用的,比如:

(czp@nebula) [nba]> go from "Tim Duncan" over like yield like._dst as dst | yield collect($-.dst) as dsts
+----------------------------------+
| dsts                             |
+----------------------------------+
| ["Manu Ginobili", "Tony Parker"] |
+----------------------------------+
Got 1 rows (time spent 2664/2978 us)

Tue, 29 Jun 2021 20:34:42 CST

(czp@nebula) [nba]> go from "Tim Duncan" over like yield like._dst as dst | yield collect($-.dst) as dsts | yield reverse($-.dsts)
+----------------------------------+
| reverse($-.dsts)                 |
+----------------------------------+
| ["Tony Parker", "Manu Ginobili"] |
+----------------------------------+

1 个赞

你好, 非常感谢你的耐心回答, 有关函数的我已经掌握了,
问题一: 在咨询下, go语句中能过滤出最大的跳数的结果吗? 比如: A->B->C A->B, 使用 go 1 to 10 steps from …就全部查询出来了, 但是我很只想要最大跳数的, 怎么写呢?

问题二: 我们实际场景是 go from 的结果还需要用它的$$._dst结果再去go from 其他关系再过滤, 应该怎么写呢?

以上2个问题都是我们业务实际的场景, 之前用cypher写的是