提问参考模版:
- nebula 版本:2.0.1
- 部署方式(分布式 / 单机 / Docker / DBaaS):分布式
- 是否为线上版本: N
比如有3个tag:
tag1:有id、name;
tag2:有sex、sex_dsc;
tag3:有type、type_dsc;
tag4:有hoppy、hoppy_dsc;
2个edge:
edge1:id->sex;
edge2:id->type;
edge3:id->hoppy;
这种能不能通过match语句找出同时满足sex_dsc=‘男’,type_dsc=’1’,hoppy='3’的tag1的id?
对 tag2(sex_dsc) 或者t ag3(type_dsc) 或者 tag4(hoppy_dsc) 建立索引
match(v) where v.type_dsc == ‘1’ and v.sex_dsc == ‘男’ and v.hoppy == ‘3’ return v.id
根据您提供的信息和问题,我们可以用 NebulaGraph 的 MATCH 语句来查找满足特定条件的 tag1 的 id。这里是如何设置这个查询的:
背景:
您有标签 tag1, tag2, tag3, tag4,每个标签有不同的属性。
您有从 tag1.id 指向 tag2, tag3, tag4 属性的边。
查询:
考虑到您要找出满足以下条件的 tag1.id:
tag2.sex_dsc = ‘男’
tag3.type_dsc = ‘1’
tag4.hoppy_dsc = ‘3’
您可以构建一个 MATCH 语句来遍历这些连接。以下是查询语句:
MATCH (v1:tag1)-[:edge1]->(v2:tag2),
(v1)-[:edge2]->(v3:tag3),
(v1)-[:edge3]->(v4:tag4)
WHERE v2.sex_dsc == '男'
AND v3.type_dsc == '1'
AND v4.hoppy_dsc == '3'
RETURN v1.id;
解释:
MATCH 子句:这一部分匹配图形模式,其中 v1(来自 tag1)通过指定的边连接到 v2(来自 tag2)、v3(来自 tag3)和 v4(来自 tag4)。
WHERE 子句:在这里,您为通过这些边连接的顶点指定了必须满足的条件。每个条件检查了各自标签的特定属性。
RETURN 子句:最后,返回满足所有条件的 tag1 的 id。