为什么用name去match查不出来,用vid可以,我建了tag index,关联的name属性
很离谱。求解
流程上,你先补充下 Nebula 的版本号,以及你创建 index 之后,rebuild index 过吗
好像这是一个BUG.对于一个节点有多个 TAG 并且 多个 TAG中有同名属性时,好像会有这样的问题.只查询匹配第一个 TAG 的属性.你的company 没有做为第一个 .就被略过了.
v2.0,重建过索引
目前数据一个节点只会对应一个tag,但是有两个tag有个共同的属性name。我试试换属性名
刚刚发现一个新的问题:graph版本2.0,用nebula-java 的GraphClientExample 换了schema跑,
报错
[2021-08-13T10:39:36.773+0800][INFO ][main][com.vesoft.nebula.client.graph.net.NebulaPool][|||][]Get connection to 100.69.149.58:9669
[2021-08-13T10:39:41.842+0800][ERROR][main][com.cmft.NebulaUpdateDemo][|||][]Execute: `INSERT VERTEX company(name, code) VALUES 'CMFT':('CMFT', 103), 'CMHK':('CMHK', 102), 'CMG':('CMG', 101); INSERT VERTEX partner(name) VALUES 'p1':('p1'), 'p2':('p2'), 'p3':('p3'), 'p4':('p4'), 'p5':('p5'), 'p6':('p6'); ', failed: SemanticError: No schema found for `company'
部分代码
{
String createSchema = "CREATE SPACE IF NOT EXISTS test(vid_type = FIXED_STRING(64)); "
+ "USE test; "
+ "CREATE TAG IF NOT EXISTS company(cname string, code int); "
+ "CREATE TAG IF NOT EXISTS partner(pname string); "
+ "CREATE EDGE IF NOT EXISTS has_partner(percent string); ";
ResultSet resp = session.execute(createSchema);
if (!resp.isSucceeded()) {
log.error(String.format("Execute: `%s', failed: %s",
createSchema, resp.getErrorMessage()));
System.exit(1);
}
}
TimeUnit.SECONDS.sleep(5);
{
String insertVertexes = "INSERT VERTEX company(name, code) VALUES "
+ "'CMFT':('CMFT', 103), "
+ "'CMHK':('CMHK', 102), "
+ "'CMG':('CMG', 101); "
+ "INSERT VERTEX partner(name) VALUES "
+ "'p1':('p1'), "
+ "'p2':('p2'), "
+ "'p3':('p3'), "
+ "'p4':('p4'), "
+ "'p5':('p5'), "
+ "'p6':('p6'); ";
ResultSet resp = session.execute(insertVertexes);
if (!resp.isSucceeded()) {
log.error(String.format("Execute: `%s', failed: %s",
insertVertexes, resp.getErrorMessage()));
System.exit(1);
}
}
啥情况求解!
你创建的属性名是 cname 啊,插入的是 name,是 2 个不一样的属性呀
换了其中一个属性名,结论怎么样.
[2021-08-13T10:55:18.774+0800][INFO ][main][com.vesoft.nebula.client.graph.net.NebulaPool][|||][]Get connection to 100.69.149.58:9669
[2021-08-13T10:55:23.855+0800][ERROR][main][com.cmft.NebulaUpdateDemo][|||][]Execute: `INSERT VERTEX company(cname, code) VALUES 'CMFT':('CMFT', 103), 'CMHK':('CMHK', 102), 'CMG':('CMG', 101); INSERT VERTEX partner(pname) VALUES 'p1':('p1'), 'p2':('p2'), 'p3':('p3'), 'p4':('p4'), 'p5':('p5'), 'p6':('p6'); ', failed: SemanticError: No schema found for `company'
改了还是不行哦
数据还没用代码插进去呢,待会儿试了告诉你
实不相瞒,我代码没改,又run了一遍,成功了。。。无厘头
[2021-08-13T11:00:02.104+0800][INFO ][main][com.vesoft.nebula.client.graph.net.NebulaPool][|||][]Get connection to 100.69.149.58:9669
Company | Partner | Percent |
CMFT | p1 | 12% |
CMFT | p2 | 23% |
Process finished with exit code 0
- -。我的理解是可能有点生效时间
换了不同的属性名,两种match都能找到,你试试
大佬们,还有个问题,如果我有个场景是要删除某个节点的某一个类型的边,这个节点有不少于2种类型的边,怎么操作呀?我看delete edge只可以删除初始节点和目标节点之间的边,要么就是把这个节点的所有边删除。。。
@rank,了解下.重复的边,可以通过rank值来区分的.
意思是成功了?
是的
我知道rank的作用,但我现在需要把某个节点的某个类型边删除,我并不知道dst是啥,这好像没有语句可以实现
那估计要先查询了.知道了dst后,再来拼ngql.用管道或者别的子查询.
我能想到的也是先查dst的vid,再去delete