ngQL match查询问题,3.0版本的多Tag模式查询,为什么不支持?


官方文档显示:tag支持指定多个类型,冒号分割查询
而实际查询发现不支持,如果仅指定:t_buyer_account是有数据的,而无论改成以下哪种,均查不到数据:
:t_device_id:t_finger_id:t_open_id:t_buyer_account
d2:t_device_id:t_finger_id:t_open_id:t_buyer_account

显然是语句支持的问题?

这个语义是AND的意思,是指点上同时有指定的几个tag。

1 个赞

那我理解错了,这个地方能支持像边一样的or吗,任意一个tag满足就行

没有计划哦,是兼容openCypher的

你好,再多问一个问题,有什么支持path类型的查询语句吗?

目前是通过math查询,同时加上where条件,手动限定比如:首尾节点不相等的数据

没太明白,你发下query可以吗

比如这个语句:
match p=(v0:t_uid)-[*4]-(v1:t_uid) where id(v0) == ‘userId123’

返回的结果可能是v0=v1的路径,即trail类型的,边不重复,点可以重复
我希望是点和边都不重复的,即path类型的

目前我只能加上条件来控制:
match p=(v0:t_uid)-[*4]-(v1:t_uid) where id(v0) == ‘userId123’ and v0 != v1

如果路径比较长,过滤条件会加很多,有没有原生就是返回path类型的路径

现在不支持哦,我们是按照openCypher语义实现的,默认是边不重复。不过你可以写个过滤的函数来支持这个。比如:

match p=(v0:t_uid)-[*4]-(v1:t_uid) where id(v0) == ‘userId123’ and path_mode(p)
3 个赞

请问具体怎么实现呢,官方文档显示:

openCypher 兼容性¶
Nebula Graph 3.0.0 不支持自定义函数(UDF)和存储过程。

1 个赞

可以过滤 边数(去重)+1=点数,因为边是不重复的

cypher 支持方式有两种:

  1. label expression
MATCH (v) WHERE v:A or v:B RETURN v
  1. union
MATCH (v:A) RETURN v UNION MATCH (v:B) RETURN v

目前 nebula 只支持第二种

1 个赞

请问在match语句中如何实现呢,在where条件里判断某个path是否包含/经过了某个点?

MATCH p=(v0:player)-[e*4]-(v1:player) 
WHERE size(e)+1==size(toSet(nodes(p))) 
RETURN p

或者

MATCH p=(v0:player)-[e*4]-(v1:player) 
WHERE not hasSameVertexInPath(p) 
RETURN p

应该都可以,这是我本地测试:

(root@nebula) [nba]> MATCH p=(v0:player)-[e*4]-(v1:player) WHERE not hassamevertexinpath(p) return count(distinct p)
+-------------------+
| count(distinct p) |
+-------------------+
| 83428             |
+-------------------+

Sat, 07 May 2022 14:39:40 CST

(root@nebula) [nba]> MATCH p=(v0:player)-[e*4]-(v1:player) WHERE size(e)+1==size(toSet(nodes(p))) return count(distinct p)
+-------------------+
| count(distinct p) |
+-------------------+
| 83428             |
+-------------------+

Sat, 07 May 2022 14:40:32 CST
5 个赞

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。